Comment puis-je faire quelque chose comme ceci:Dictonaries et Lambda dans une classe?
class Foo():
do_stuff = {
"A" : lambda x: self.do_A(x),
"B" : lambda x: self.do_B(x)
}
def __init__(self):
print "hi"
def run(self):
muh = ['A', 'B', 'A']
for each in muh:
self.do_stuff[each](each)
def do_A(self, moo):
print "A"
def do_B(self, boo):
print "B"
if(__name__ == '__main__'):
aFoo = Foo()
aFoo.run()
Il en résulte qu'il donne une erreur que l'auto ne se définit pas à la fonction lambda, mais si je le supprimer. Il dit que do_A ou do_B n'est pas défini.
EDIT
j'ai réussi à comprendre. Je dois changer l'expression lambda en quelque chose comme ceci:
lambda x, y: x.do_A(y)
et je voudrais l'appeler comme:
self.do_stuff[each](self, each)
Est-ce une idée terrible? Do_stuff n'est pas une variable d'instance dans votre exemple.
+1: Plus simple. Pas de Lambda. –
Pour que les caractères de soulignement fonctionnent, utilisez \ pour leur échapper, par exemple \ _ \ _ init \ _ \ _ – Brian