У меня есть класс, который определяет набор функций обратного вызова (показанный здесь как 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
Вы можете определить проблему?
Что происходит: когда класс инициализируется, значения из cb1
и cb2
(которые являются оба Нет
) копируются на карту. Таким образом, даже после того, как пользователь «зарегистрирует» обратный вызов (назначив cb1
), значение на карте все еще будет None
, и ничего не будет вызвано.
Поскольку в Python нет такой вещи, как «по ссылке», как мне это исправить?