2015-03-22 4 views
2

Я новичок в анонимном классе python. Я нашел этот код на сайтеpython анонимные имена переменных класса

class Struct(object): 
    def __init__(self, **kwargs): 
     self.__dict__.update(kwargs) 

    def __repr__(self): 
     d = self.__dict__ 
     results = [type(self).__name__ + "("] # or: self.__class__.__name__ 
     for key in sorted(d.keys()): 
      if (len(results) > 1): results.append(", ") 
      results.append(key + "=" + repr(d[key])) 
     results.append(")") 
     return "".join(results) 

    def __eq__(self, other): 
     return self.__dict__ == other.__dict__ 

    def __hash__(self): 
     return hash(repr(self)) # inefficient but simple 

Использование является

obj = Struct(x=1, y=2, c=3) 
obj.x #1 
obj.y #2 

Интересно, как я могу динамические присвоению имен переменных.

Я пытаюсь сделать что-то вроде этого

for i, item in enumerate(row): 
    object = Struct() 
    a = (header[i]) 
    object.a= item 

Очевидно, что это неправильно, a в object.a струнный a. Как я могу динамически это сделать?

ответ

1

Используйте функцию setattr, чтобы создать атрибут. Цитирование документации,

Аргументы - это объект, строка и произвольное значение. Строка может называть существующий атрибут или новый атрибут. Функция присваивает значение атрибуту, если объект разрешает его. Например, setattr(x, 'foobar', 123) эквивалентен x.foobar = 123.

Таким образом, в вашем случае, вы можете создать атрибут со значением от header[i], как этого

setattr(obj, header[i], item) 
+0

Спасибо, я просто найти его форму документации. –