Ссылка Python на обратный вызов в словаре

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

6
задан Jonathon Reinhart 20 September 2012 в 21:46
поделиться