do_stuff не является переменной экземпляра в вашем примере. Это больше похоже на статическую переменную. Вам необходимо определить do_stuff в методе (например, метод init ), где у вас есть ссылка на себя, чтобы сделать его переменной экземпляра. Надеюсь, этот пример прояснит для вас:
class Foo:
def __init__(self):
self.do_stuff = { "A": self.do_A, "B": self.do_B }
def run(self):
for x in ["A", "B"]:
self.do_stuff[x]("hi")
def do_A(self, x):
pass
def do_B(self, x):
pass
Обратите внимание, что лямбда-функции не нужны. Вы можете просто хранить ссылки на сами функции в своем словаре. Запись «self.do_A» автоматически передаст self в качестве первого аргумента.
РЕДАКТИРОВАТЬ: Кто-нибудь знает, как правильно показать подчеркивания в тексте, не являющемся примером кода?
РЕДАКТИРОВАТЬ: WTH? Предварительный просмотр показывает подчеркивание иначе, чем сообщение.