方法鏈(method chaining) 是面向對象的編程語言中的一種常見語法,可以讓開發者在只引用對象一次的情況下,對同一個對象進行多次方法調用。舉個例子:
假設我們有一個Foo類,其中包含有兩個方法――bar和baz。
我們創建一個Foo類的實例:
foo = Foo()
如果不使用方法鏈,要想連續調用對象foo的bar和baz方法的話,我們得這樣做:
foo.bar() # Call method bar() on object foo. foo.baz() # Call method baz() on object foo.
如果使用方法鏈的話,我們就能這樣實現: foo.bar().baz()
方法鏈的一個好處,是可以減少你使用對象名的次數。調用的方法越多,能夠減少的次數就越多。因此,這個方法也能一定程度上減少需要閱讀、測試、調試、維護的代碼數量。這個好處不大,但也是有用的。
請注意,方法鏈的一個限制是,只能用在不需要返回其他值的方法上,因為你需要返回self對象。即使Python支持用一個return語句返回多個值,也可能無法解決這個問題。
下面是在Python中實現方法鏈的一個示例:
class Person: def name(self, value): self.name = value return self def age(self, value): self.age = value return self def introduce(self): print "Hello, my name is", self.name, "and I am", self.age, "years old." person = Person() person.name("EarlGrey").age(21).introduce() # => Hello, my name is EarlGrey and I am 21 years old.
上面那種實現可能太簡單了。下面我們來看一種更加現實的方法鏈使用方法:編寫一個字符串處理程序string_processor.py,支持方法鏈。
import copy class StringProcessor(object): ''' A class to process strings in various ways. ''' def __init__(self, st): '''Pass a string for st''' self._st = st def lowercase(self): '''Make lowercase''' self._st = self._st.lower() return self def uppercase(self): '''Make uppercase''' self._st = self._st.upper() return self def capitalize(self): '''Make first char capital (if letter); make other letters lower''' self._st = self._st.capitalize() return self def delspace(self): '''Delete spaces''' self._st = self._st.replace(' ', '') return self def rep(self): '''Like Python's repr''' return self._st def dup(self): '''Duplicate the object''' return copy.deepcopy(self) def process_string(s): print sp = StringProcessor(s) print 'Original:', sp.rep() print 'After uppercase:', sp.dup().uppercase().rep() print 'After lowercase:', sp.dup().lowercase().rep() print 'After uppercase then capitalize:', sp.dup().uppercase().\ capitalize().rep() print 'After delspace:', sp.dup().delspace().rep() def main(): print "Demo of method chaining in Python:" # Use extra spaces between words to show effect of delspace. process_string('hOWz It GoInG?') process_string('The QUIck brOWn fOx') main()
下面是這個程序的運行結果:
$ python string_processor.py Original: hOWz It GoInG? After uppercase: HOWZ IT GOING? After lowercase: howz it going? After uppercase then capitalize: Howz it going? After delspace: hOWzItGoInG? Original: The QUIck brOWn fOx After uppercase: THE QUICK BROWN FOX After lowercase: the quick brown fox After uppercase then capitalize: The quick brown fox After delspace: TheQUIckbrOWnfOx
綜上,我們可以發現,方法鏈有其用處,不過過度使用可能不太好。
如何在Python中使用方法鏈?相信大家都有了一個大概的思路,希望本文所述對大家學習有所幫助。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
