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