2016-07-21 10 views
1

Wie konstruiere ich einen Methodennamen zur Verwendung mit einer instanziierten Klasse? Ich versuche, eine Methode in einer Klasse 'jsonmaker' auszuführen, wobei die Methode dem Datentyp entspricht, der in der filein-Zeichenfolge angegeben ist.Einen Methodennamen erstellen

for filein in filein_list: 
    datatype = filein[(filein.find('_')):-8] 
    method_name = pjoin(datatype + 'populate') 
    instantiated_class.method_name(arg1, arg2, arg3) 

Wenn ich den obigen Code versuchen, erhalte ich die Fehlermeldung

'AttributeError: 'jsonmaker' object has no attribute 'method_name'' 

in der Tat gibt es ein Verfahren, bei jsonmaker der pjoin entspricht (Datentyp + ‚besiedeln‘) so, wie kann ich sagen, die Klasse das zu erkennen? Entschuldigung, wenn ich das nicht gut erkläre.

Antwort

2

Sie können das Attribut einer Klasseninstanz nicht referenzieren, indem Sie eine Variable direkt hinter eine Punktreferenz stellen. Nicht einmal, wenn die Variable auf eine Zeichenfolge verweist, die mit dem Namen des Attributs übereinstimmt.

Sie könnten stattdessen getattr verwenden, um die method aus dem String zu bekommen und es dann mit diesen Parametern aufrufen:

getattr(instantiated_class, method_name)(arg1, arg2, arg3) 
+0

Dies ist, was ich suchte. Ich hatte getttr nur zum Ausführen einer Funktion auf einer Variablen, deren Name Sie bis zum Zeitpunkt der Ausführung nicht kennen. Vielen Dank. – jmdeamer