2016-11-28 7 views
0

Я хочу, чтобы обновить свои аналогичные atributes имя, но я получаю сообщение об ошибке:Update atributes похожим именем в классе питона

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

Вот мой код:

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

Вместо того, чтобы иметь кучу подобных переменных класса, то почему бы не придерживаться их в список, называемый 'name_0', тогда вы можете получить доступ к тем, что хотите, с помощью значений индекса и упростить его. – MooingRawr

+2

Это должно быть 'setattr (my_object, 'name_0_' + str (i), i)'. Вы забыли свои цитаты. – JCVanHamme

ответ

1

Использование setattr() требует, чтобы передать строку в качестве второго параметра. Это ясно видно в Python documentation for setattr():

[...] 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.

Так используйте:

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

Вместо:

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

Работы, большое спасибо. –

1

SetAttr второй параметр должен быть строка:

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)) 

 Смежные вопросы

  • Нет связанных вопросов^_^