2016-07-01 12 views
2

Ich bin ein Neuling in Python zuweisen, und ich habe eine Klasse mit vielen Variablen, wie folgt aus:Python Neueinsteiger: mit eval() einen Wert in eine self.variable

class trash: 

    def __init__(self): 
     self.var1=1 
     self.var2=1 
     self.var3=1 
     ... 

    def replaceByTwo(self, var_name) 
     self.eval(var_name) = 2 

aber wenn ich rufe replaceByTwo, erhalte ich:

AttributeError: 'trash' object has no attribute 'eval' 

weiß jemand, wie man das löst? Danke!

+0

Ich bin verwirrt ... zuerst. Eval ist gefährlich .. aber abgesehen davon, es dauert ein Ausdruck auszuwerten. Sie geben ihm einen Namen, der nicht definiert ist –

Antwort

4

eval ist eine eingebaute nicht eine Standardmethode für Python-Klassen. Aber was Sie suchen, ist setattr:

def replaceByTwo(self, var_name): 
    setattr(self, var_name, 2) 

Versuch:

>>> t = trash() 
>>> print(t.var2) 
1 
>>> t.replaceByTwo('var2') 
>>> print(t.var2) 
2 
4

Der Fehler, den Sie bekommen, ist, weil Sie versuchen, self.eval() aufzurufen, aber Eval ist eine globale Funktion und kein Mitglied Ihrer Instanz.

und trotzdem für das, was Sie tun möchten, z. B. Mitglied/Attribut nach Name, sollten Sie setattr() verwenden.