2016-11-28 1 views
0

Ich möchte ähnliche Namen atributes aktualisieren, aber ich erhalte eine Fehlermeldung:Update-ähnlichen Namen atributes in Python-Klasse

Traceback (most recent call last): 
    File "python", line 12, in <module> 
NameError: name 'name_0_' is not defined 

Hier mein Code:

class Test: 
    name_0_1 = 0 
    name_0_2 = 0 
    name_0_3 = 0 
    name_0_4 = 0 


my_object = Test() 
my_list_value = range(1,8) 

for i in my_list_value: 
    print(setattr(my_object, name_0_ + str(i), i)) 
+3

Statt eine Reihe von ähnlichen Klassenvariablen zu haben, warum bleiben sie nicht in eine Liste namens 'name_0', dann können Sie mit den Indexwerten auf die gewünschten Werte zugreifen und sie einfacher durchlaufen. – MooingRawr

+2

Es muss 'setattr (mein_Objekt, 'name_0_' + str (i), i)' sein. Du hast deine Zitate vergessen. – JCVanHamme

Antwort

1

setattr() Verwendung erfordert, dass Sie einen String als zweiten Parameter zu übergeben. Dies ist deutlich in den Python documentation for setattr() zu sehen:

[...] The arguments are an object, a string and an arbitrary value. The string may name an existing attribute or a new attribute. The function assigns the value to the attribute, provided the object allows it. For example, setattr(x, 'foobar', 123) is equivalent to x.foobar = 123.

So verwenden:

setattr(my_object, 'name_0_' + str(i), i) 

Statt:

setattr(my_object, name_0_ + str(i), i) 
+0

Works, vielen Dank. –

1

Der setattr zweite Parameter a sein muss string:

class Test: 
    name_0_1 = 0 
    name_0_2 = 0 
    name_0_3 = 0 
    name_0_4 = 0 


my_object = Test() 
my_list_value = range(1,8) 

for i in my_list_value: 
    print(setattr(my_object, 'name_0_' + str(i), i))