2016-11-28 3 views
0

私は似た名前atributesを更新したいが、私はエラーを取得する:ここで更新似た名前の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()を使用すると、2番目のパラメータとして文字列を渡す必要があります。これは明らかに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 2番目のパラメータがなければなりません文字列:

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)) 
関連する問題