標籤:def 連結地址 id3 參考 pen 需要 highlight cut orm
1、大部分情況下,你擁有一個單方法類的原因是需要儲存某些額外的狀態來給方法使用。
此種情況下可以使用閉包代替,參考
關於這個計數器閉包和類各有千秋吧,但如果不是但方法的類,使用閉包類比物件導向,那肯定是沒有使用類好,類不光是封裝了,還可以繼承,代碼結構也更清晰。
將單方法的類轉換為函數問題
你有一個除 __init__() 方法外只定義了一個方法的類。為了簡化代碼,你想將它轉換成一個函數。
解決方案
大多數情況下,可以使用閉包來將單個方法的類轉換成函數。 舉個例子,下面樣本中的類允許使用者根據某個模板方案來擷取到URL連結地址。
from urllib.request import urlopenclass UrlTemplate: def __init__(self, template): self.template = template def open(self, **kwargs): return urlopen(self.template.format_map(kwargs))# Example use. Download stock data from yahooyahoo = UrlTemplate(‘http://finance.yahoo.com/d/quotes.csv?s={names}&f={fields}‘)for line in yahoo.open(names=‘IBM,AAPL,FB‘, fields=‘sl1c1v‘): print(line.decode(‘utf-8‘))
這個類可以被一個更簡單的函數來代替:
def urltemplate(template): def opener(**kwargs): return urlopen(template.format_map(kwargs)) return opener# Example useyahoo = urltemplate(‘http://finance.yahoo.com/d/quotes.csv?s={names}&f={fields}‘)for line in yahoo(names=‘IBM,AAPL,FB‘, fields=‘sl1c1v‘): print(line.decode(‘utf-8‘))
關於python單方法的類