對(duì)于python偏函數(shù)partial理解運(yùn)用起來(lái)比較簡(jiǎn)單孕锄,就是對(duì)原函數(shù)某些參數(shù)設(shè)置默認(rèn)值,生成一個(gè)新函數(shù)苞尝。而如果對(duì)于類方法畸肆,因?yàn)榈谝粋€(gè)參數(shù)是self,使用partial就會(huì)報(bào)錯(cuò)了宙址。 對(duì)此轴脐,python3.4新引入了 partialmethod, 下面是官網(wǎng)實(shí)例。
>>> class Cell(object):
... def __init__(self):
... self._alive = False
... @property
... def alive(self):
... return self._alive
... def set_state(self, state):
... self._alive = bool(state)
... set_alive = partialmethod(set_state, True)
... set_dead = partialmethod(set_state, False)
...
>>> c = Cell()
>>> c.alive
False
>>> c.set_alive()
>>> c.alive
True
簡(jiǎn)單的說(shuō)大咱,在類中恬涧,不管是普通方法,staticmethod
碴巾,classmethod
溯捆,還是abstractmethod
,都可以當(dāng)作是partial一樣使用厦瓢,返回的也是callable
的functools.partial
對(duì)象提揍。
不過(guò)在類外使用的話,返回的是partialmethod
對(duì)象煮仇,是不能直接調(diào)用的碳锈。
PS:總覺(jué)得官網(wǎng)說(shuō)明不太準(zhǔn)確,因?yàn)榭搭愔衅胀ǚ椒ê?code>staticmethod都是有__get__
屬性的欺抗,都是descriptor
參考: