0

次のように、匿名クラスのインスタンスを作成しました。

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

これはどのように機能しますか?

4

2 に答える 2

1

以前Feedは、呼び出し可能な関数でした。次に、に置き換えFeedましたdict。Adictは呼び出し可能ではありません。を返す呼び出し可能な関数に置き換えたい場合はdict、別の を使用しlambdaます。

msg.Feed = lambda: {"A": 1}
于 2013-05-27T04:59:33.630 に答える
0

ここで説明したクラスでは、「Feed」メソッドは空の辞書を返すだけの関数です。

それに割り当てると:

msg.Feed={"A":1}

関数ではなく実際の辞書になるため、再度呼び出そうとすると、次のようになります。

msg.Feed()

あなたは実際にこれを言っています:

{"A":1}()

そして、辞書は呼び出し可能ではないため、例外です。

于 2013-05-27T05:06:07.570 に答える