我試圖用下面的代碼覆蓋對象的下一個函數(python 2.7)。覆蓋實例的下一個功能
當對象的next
方法被直接調用時,調用新函數。但是,當我在我的對象上調用內置函數next()
(其中according to the docs應該調用實例的下一個方法)時,會調用原始函數。
有人可以解釋這種行爲嗎?
class Test(object):
def __iter__(self):
return self
def next(self):
return 1
test = Test()
def new_next(self):
return 2
test.next = type(test.__class__.next)(new_next, test, test.__class__)
print test.next() # 2
print next(test) # 1
有趣。可能與[PEP 3114](https://www.python.org/dev/peps/pep-3114)有關? –
@AndréLaszlo看起來像PEP是Python 3 – warvariuc
@warvariuc糟糕,你是對的。 –