2009-12-06 55 views
21

如果我有一個Python類,並且想根據變量調用一個函數,我該怎麼做?我想象下面可以做到這一點:來自字符串的調用方法

class CallMe: # Class 

    def App(): # Method one 

     ... 

    def Foo(): # Method two 

     ... 

variable = "App" # Method to call 

CallMe.variable() # Calling App() 

但它不能。任何其他方式來做到這一點?

+1

你如何決定在'variable'中放置什麼值? – 2009-12-06 14:46:46

+0

我會使用傳遞給該文件的參數。 :) – Sirupsen 2009-12-06 16:10:13

回答

57

你可以這樣做:

getattr(CallMe, variable)() 

getattr是一個內置的方法,它返回的命名歸因對象的值。在這種情況下的值是一個方法對象,你可以調用()

+1

你能告訴我如果我有一個字符串的值是「CallMe」'我該怎麼辦? – Y2H 2015-12-29 15:39:59

3

你的代碼看起來不像python,可能你想這樣做?

class CallMe: 

    def App(self): #// Method one 
     print "hello" 

    def Foo(self): #// Method two 
     return None 

    variable = App #// Method to call 

CallMe().variable() #// Calling App() 
1

您可以使用getattr,或者您可以將綁定或未綁定的方法分配給該變量。綁定方法綁定到類的特定實例,並且未綁定的方法綁定到類,所以您必須將實例作爲第一個參數傳遞。

例如

class CallMe: 
    def App(self): 
     print "this is App" 

    def Foo(self): 
     print "I'm Foo" 

obj = CallMe() 

# bound method: 
var = obj.App 
var()   # prints "this is App" 

# unbound method: 
var = CallMe.Foo 
var(obj)  # prints "I'm Foo" 
1

你的班級已被宣佈爲「舊式班級」。我建議你讓所有的課程都是「新式課程」。

舊式和新式之間的區別在於新式類可以使用繼承,而這種繼承可能不會馬上需要。但這是一個很好的習慣。

下面是您要做的一個新風格的類:您使用Python語法來聲明它從「object」繼承。你可以在課程名稱後面加括號,並在括號內放置對象。像這樣:

class CallMe(object): # Class 

    def App(): # Method one 

     ... 

    def Foo(): # Method two 

     ... 

正如我所說的,您可能不需要立即使用繼承,但這是一個很好的習慣。這裏有幾個關於StackOverflow的問題,其效果是「我正在嘗試執行X並且它不起作用」,結果證明這個人編寫了一箇舊式的類。