gpt4 book ai didi

python - 在运行时附加 __call__ 不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:00 25 4
gpt4 key购买 nike

我试图在运行时定义 __call__ dunder 方法,但没有成功。代码如下:

class Struct:
pass

result=Struct()
dictionary={'a':5,'b':7}
for k,v in dictionary.items():
setattr(result,k,v)

result.__call__=lambda self: 2

但是,解释器返回错误:

Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'Struct' object is not callable

但是,如果我从一开始就添加 dunder 方法,一切都会神奇地起作用:

class Foo():
def __call__(self):
return 42

foo=Foo()
foo() #returns 42

我在 Windows 64 位机器上使用 Python 3.4。

我哪里做错了?

最佳答案

已编辑

您可以通过将 __call__ 添加到 class 对象来附加它:

Struct.__call__ = lambda self: 2

但是如果你想为每个实例获取不同的值,你应该:

class Struct:
def __call__(self):
return self._call_ret

result=Struct()
dictionary={'a':5,'b':7}
for k,v in dictionary.items():
setattr(result,k,v)
result._call_ret = 2

print(result())

@Blckknght 谢谢。

关于python - 在运行时附加 __call__ 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32398684/

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