2017-12-10 16 views
0

Ich versuche, eine Variable zur Laufzeit an eine bestimmte Liste innerhalb einer Klasse zu binden. Das folgende Snippet funktioniert, aber ich hätte gerne den Klassennamen im eval-Ausdruck anstelle der Variablen. das heißt das Äquivalent:python eval, um spezifische Klassenvariable zur Laufzeit anzusprechen

mybin = 'bin2' 
eval(foo.mybin) 

, die offensichtlich nicht funktionieren ... aber ich kann nicht die Syntax nach verschiedenen Inkarnationen zu versuchen, zu kleben „foo‘ und „mybin' zusammen scheinen, um herauszufinden.

class A: 
    bin1 = [3,6,9] 
    bin2 = [12,14,25] 

foo = A() 

mybin = 'foo.bin2' 

for bin in eval(mybin): 
    print bin 

Ausgänge:

12 
14 
25 

Antwort

1

Sie eval nicht verwenden. Für dynamisches Attribut Zugriff, weiß Python getattr:

mybin = 'bin2' 
for bin in getattr(foo, mybin): 
    print bin 
+0

Gefahren alter/andere Sprache Programmierung Gewohnheiten! Ich bin neu in Python und war noch nie zuvor auf getattr. Danke für den Tipp! –

0

Vielleicht f-string ist, was man gern sein könnte:

class A(): 
    bin1 = [1, 2] 
    bin2 = [12, 14, 25] 

foo = A() 

my_bin = 'bin2' 

print(eval(f'foo.{my_bin}')) 
#[12, 14, 25]