2013-05-08 3 views
0

Предположим, что мне нужно создать класс с большим количеством переменных. Могу ли я использовать цикл for для каждого из них? что:Об оптимизации создания класса

class New(object): 
    def __init__(self, var1, var2, var3, var4, var5, var6): 
     for x in [var1, var2, var3, var4, var5, var6]: 
      self.x = x 

Очевидно, что приведенный выше код не работает, но можно ли это сделать? Лучший способ сделать это? , а не вводить

self.var1 = var1 
self.var2 = var2 

и т.д.?

+1

Есть пути, да, но всякий раз, когда я хотел что-то подобное, я был либо делали тяжелое метапрограммирование (и, следовательно, не было фиксированного списка имен, и у меня не было выбора), или класс становился слишком сложным. Думаю об этом. Возможно, ваш класс - это просто контейнер, возможно, 'collection.namedtuple'. – delnan

+1

Эй, дельнан, я понимаю, что есть лучшие/разные способы сделать это, я просто пытаюсь понять Python немного лучше. Я ценю вход. – brett

ответ

1

Вы можете сохранить список имен атрибутов ...

In [1]: class New(object): 
    ...: names = ['foo', 'bar'] 
    ...: def __init__(self, *args): 
    ...:  for k, v in zip(New.names, args): 
    ...:   setattr(self, k, v) 
    ...:    

In [2]: a = New(1, 2) 

In [3]: a.foo 
Out[3]: 1 

или использовать ключевые аргументы:

In [1]: class New(object): 
    ...:  def __init__(self, **kwargs): 
    ...:   for k, v in kwargs.iteritems(): 
    ...:    setattr(self, k, v) 
    ...: 

In [2]: a = New(foo=1, bar=2) 

In [3]: a.foo 
Out[3]: 1 
Смежные вопросы