콜백 함수 세트를 지정하는 클래스가 있습니다 (여기에 cb1
및 cb2
으로 표시). 나는 어떤 사건 이후에 내가 부르고 싶은 이들의지도를 유지한다.사전의 콜백에 대한 파이썬 참조
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
이고 아무 것도 호출되지 않습니다.
파이썬에는 '참조로 된'것이 없으므로 어떻게 수정해야합니까?
Nitpick : 모든 것이 파이썬에서 '참조'전달됩니다. * name *이 아니라 참조에 의한 것입니다. 이름을 다른 객체에 다시 바인딩하면 이름이 가리키는 것과 다른 참조가 업데이트되지 않습니다. –