Python将函数传递给对象

时间:2015-05-29 17:56:39

标签: python oop object attributes

我正在尝试创建一个类,允许用户创建一个自定义按钮对象,它保存按钮的外观属性,以及一个函数,当我调用按钮的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()

这是正确的方法,还是有特定的方式来执行此类操作?

2 个答案:

答案 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()