gpt4 book ai didi

python - 覆盖实例下一个函数

转载 作者:太空狗 更新时间:2023-10-29 21:04:57 27 4
gpt4 key购买 nike

我正在尝试使用下面的代码(python 2.7)覆盖对象的下一个函数。

当直接调用对象的next方法时,会调用新的函数。但是,当我调用对象上的内置 next() 函数时(according to the docs 应该调用实例的 next 方法),将调用 ORIGINAL 函数。

有人可以解释这种行为吗?

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

最佳答案

如果我正在阅读 this source正确地,似乎在定义类时设置了迭代器。不过我可能读错了。我猜这是为了快速查找 next 函数(将其设置为 slot ),因为它用于循环等。

鉴于此,以下内容似乎可以满足您的要求:

>>> test.__class__.next = type(test.__class__.next)(new_next, test, test.__class__)
>>> next(test)
2

关于python - 覆盖实例下一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41488230/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com