Python 动态改变边界方法行为
我创建了一个匿名类Instance,如下所示:Python 动态改变边界方法行为,python,Python,我创建了一个匿名类Instance,如下所示: msg = type("Inner", (object,), {"MessageType": lambda self: "300","Feed": lambda self:{} })() 当我打印出提要时,它看起来很好: >>> msg.Feed() {} 现在我需要Feed为这个实例返回一个不同的值: >>> msg.Feed={"A":1} >>> msg.Feed() Traceba
msg = type("Inner", (object,), {"MessageType": lambda self: "300","Feed": lambda self:{} })()
当我打印出提要时,它看起来很好:
>>> msg.Feed()
{}
现在我需要Feed为这个实例返回一个不同的值:
>>> msg.Feed={"A":1}
>>> msg.Feed()
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
msg.Feed()
TypeError: 'dict' object is not callable
>>>
>msg.Feed={“A”:1}
>>>msg.Feed()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
msg.Feed()
TypeError:“dict”对象不可调用
>>>
这是如何工作的?以前,
Feed
是一个可调用的函数。然后,您将Feed
替换为dict
。dict
不可调用;如果要将其替换为返回dict
的可调用函数,请使用另一个lambda
:
msg.Feed = lambda: {"A": 1}
在这里描述的类中,“Feed”方法是一个只返回空dict的函数 分配给它时:
msg.Feed={"A":1}
它变成了一个实际的dict,而不是一个函数,因此当您再次尝试调用它时:
msg.Feed()
你实际上是这么说的:
{"A":1}()
dict是不可调用的,因此出现异常。您将
msg.Feed
设置为字典。你预计会发生什么?