动态更改绑定方法行为

时间:2013-05-27 04:57:29

标签: python

我创建了一个匿名类的实例,如下所示:

msg = type("Inner", (object,), {"MessageType": lambda self: "300","Feed": lambda self:{} })()

当我打印Feed时看起来很好:

>>> 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
>>> 

这将如何运作?

2 个答案:

答案 0 :(得分:1)

之前,Feed是一个可调用的函数。然后,您使用Feed替换了dictdict不可调用;如果你想用一个返回dict的可调用函数替换它,请使用另一个lambda

msg.Feed = lambda: {"A": 1}

答案 1 :(得分:0)

在这里描述的类中,“Feed”方法是一个只返回空字典的函数。

分配给它时:

msg.Feed={"A":1}

它变成了一个实际的dict,而不是一个函数,所以当你再次尝试调用它时:

msg.Feed()

你实际上这么说:

{"A":1}()

并且dict不可调用,因此例外。