Python中方法鏈的使用方法

2021-08-30 19:51:08 字數 3190 閱讀 1256

return self

方法鏈(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的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...