2016-04-16 16 views
0

Nun, ich bin versucht, dies zu tun:Fehler einen Methodennamen als Argument in einer Klassenmethode vorbei

class Foo(object): 
    def method1(self): 
     print "method1" 
    def method2(self): 
     print "method2"   

class Fo1(object): 
    def __init__(self): 
     self.a = Foo() 
    def classMethod(self, selection): 
     self.a.selection() 

A = Fo1() 
A.classified('method2') 

Ich habe diesen Fehler:

--> AttributeError: 'Fo1' object has no attribute 'selection'

Ich will nicht verwenden, dies (scheint mir, mehr Codierung):

def classified(self,selection): 
    if selection == "method1": self.a.method1() 
    elif selection == "method2": self.a.method2() 

Wie soll ich die Methode, so dass ich übergeben kann der Methodenname als Argument? Danke!

+2

'getattr (self.a, auswahl)()'. –

+2

Es gibt selten einen Grund, dies tatsächlich zu tun. Du kannst eine Referenz direkt an eine Methode übergeben: 'A.classMethod (Foo.method2)' – chepner

+0

du rufst an, wo du zu sein scheinst, um classMethod zu nennen. Das heißt, Sie verwenden classMethod und werden synonym klassifiziert. Wähle einen Namen aus. – dbliss

Antwort

3

Sie können dazu getattr verwenden, z.

def classMethod(self, selection): 
    getattr(self.a, selection)() 

getattr nimmt ein Objekt einen Attributnamen und gibt das Attribut, das Sie dann aufrufen können.

+0

Vielen Dank für Ihre Vorschläge! – froycard

Verwandte Themen