2015-05-29 173 views
1

我想創建一個類,它允許用戶創建一個自定義按鈕對象,該對象包含按鈕的外觀屬性,以及一個函數,我希望能夠在運行時我稱這個按鈕的executeFunction()命令。Python將函數傳遞給對象

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

紅色是否定義?您可能正在尋找「紅色」。 – Aereaux

+0

不,我只是用它作爲例子,它通常是一個RGB元組。 –

回答

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() 
2

你應該有

newButton = Button("Example", red, foo) 

這通過FOO,而不是傳遞foo的返回值,因爲你的代碼一樣。

+0

因此,如果我傳入一個這樣的函數,我應該可以從一個方法調用它完全罰款嗎? –

+0

@AndrewLalis:是的。 – Aereaux