我该怎么做:
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()
这导致它给出一个错误,即自己没有在lambda函数中定义,但是如果我删除它。它表示没有定义do_A或do_B。
修改的
我设法搞清楚了。我需要将lambda表达式更改为以下内容:
lambda x, y: x.do_A(y)
我会称之为:
self.do_stuff[each](self, each)
这是一个糟糕的主意吗?
答案 0 :(得分:7)
do_stuff不是示例中的实例变量。它更像是一个静态变量。您需要在方法(例如, init 方法)中定义do_stuff,其中您具有对self的引用,以使其成为实例变量。我希望这个例子能为你澄清一些事情:
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
请注意,lambda函数不是必需的。您只需在字典中存储对函数本身的引用即可。符号“self.do_A”将自动传递self作为第一个参数。
编辑:有没有人知道如何在非代码示例文本中正确显示下划线?