return self
方法鏈(method chaining)是物件導向的程式語言中的一種常見語法,可以讓開發者在只引用物件一次的情況下,對同乙個物件進行多次方法呼叫。舉個例子:
假設我們有乙個foo類,其中包含有兩個方法——bar和baz。
我們建立乙個foo類的例項:
foo = foo()如果不使用方法鏈,要想連續呼叫物件foo的bar和baz方法的話,我們得這樣做:
foo.bar() # call method bar() on object foo.如果使用方法鏈的話,我們就能這樣實現: foo.bar().baz()foo.baz() # call method baz() on object foo.
方法鏈的乙個好處,是可以減少你使用物件名的次數。呼叫的方法越多,能夠減少的次數就越多。因此,這個方法也能一定程度上減少需要閱讀、測試、除錯、維護的**數量。這個好處不大,但也是有用的。
請注意,方法鏈的乙個限制是,只能用在不需要返回其他值的方法上,因為你需要返回self物件。即使python支援用乙個return語句返回多個值,也可能無法解決這個問題。
下面是在python中實現方法鏈的乙個示例:
class person:上面那種實現可能太簡單了。下面我們來看一種更加現實的方法鏈使用方法:編寫乙個字串處理程式string_processor.py,支援方法鏈。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.
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):
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的with和as使用方法
對於乙個事先需要設定事後需要清理的任務,with可以很簡潔的處理並且監控中間的異常。但是實際上它的功能完全可以用try except else finally語句實現,但是with as更加簡潔,可以看做try語句的簡化版。非常常見的例子是檔案的開啟 同樣的功能,如果用try語句 f open 1....
Zabbix api的使用方法(python版)
時間2013 12 21 作者 itnihao 郵箱 itnihao qq.com 部落格 如需引用,請註明以上資訊,謝謝合作 zabbix api 具有重要的功能 為第三方呼叫 zabbix 批量操作提供可程式設計介面 從而輕鬆的用於自己的業務系統,運維系統相整合。zabbix api 是基於前端...
Python 斷言的使用方法
自動化測試中尋找元素並進行操作,如果在元素好找的情況下,相信大家都可以較熟練地編寫用例指令碼了,但光進行操作可能還不夠,有時候也需要對預期結果進行判斷。這裡介紹幾個常用斷言的使用方法,可以一定程度上幫助大家對預期結果進行判斷。這裡介紹以下幾個斷言方法 assertequal assertnotequ...