コールバック関数のセットを指定するクラスがあります(ここにはcb1
とcb2
と表示されています)。私はいくつかのイベントの後に電話したいこれらのマップを保持しています。辞書のコールバックへのPythonリファレンス
class Foo:
cb1 = None
cb2 = None
def test(self, input):
for (name, callback) in map:
if name == input:
if callback: callback()
...
map = {'one':cb1, 'two':cb2}
def mycallback():
print "mycallback()"
f = Foo()
f.cb1 = mycallback # Register our callback
f.test('one') # Nothing happens
問題を見つけることができますか?
何が起こるかは、クラスが初期化されるとき、(両方None
ある)値cb1
のとcb2
をマップにコピーされることです。したがって、ユーザーがコールバックを(cb1
に割り当てることによって)コールした後でさえ、マップの値はまだNone
であり、何も呼び出されません。
Pythonで「参照」というようなことはないので、これをどのように修正すればよいですか?
Nitpick:すべてはPythonで「参照によって」渡されます。 * name *ではなく、参照によるものです。名前を別のオブジェクトに再バインドすると、名前が指し示していたものへの他の参照は更新されません。 –