我正在尝试创建一个类,允许用户创建一个自定义按钮对象,它保存按钮的外观属性,以及一个函数,当我调用按钮的executeFunction()时,我希望能够运行该函数命令。
def foo():
print "bar"
class Button(object):
def __init__(self, name, color, function):
self.name = name
self.color = color
self.function = function
# I want to be able to run the function by calling this method
def executeFunction(self):
self.function()
newButton = Button("Example", red, foo())
newButton.executeFunction()
这是正确的方法,还是有特定的方式来执行此类操作?
答案 0 :(得分:2)
你应该
newButton = Button("Example", red, foo)
这会传递foo,而不是像你的代码那样传递foo的返回值。
答案 1 :(得分:2)
在python中,函数也是对象,可以传递。您的代码中存在一个小错误,并且可以轻松简化此操作。
第一个问题是,在将函数传递到foo
类时,您正在调用函数Button
。这会将foo()
的结果传递给类,而不是函数本身。我们想通过foo
。
我们可以做的第二件好事就是将函数分配给一个名为function的实例变量(或者你想要的executeFunction),然后可以通过newButton.function()
调用它。
def foo():
print "bar"
class Button(object):
def __init__(self, name, color, function):
self.name = name
self.color = color
self.function = function
newButton = Button("Example", red, foo)
newButton.function()