Присвоение значений классу динамически - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть такой класс Python

class Car(Base):

    def __init__(self, details):
        for field,value in details.iteritems():
            self[field] = value

и я так называю

car_details['make'] = 'Dodge'
car_details['model'] = 'Ram'

car = Car(car_details)

однако это не удается с

TypeError: 'Car' object does not support item assignment

Я пытаюсь настроить его, поэтому я могу просто использовать car.make, как только класс будет инициализирован.

Ответы [ 3 ]

3 голосов
/ 01 ноября 2011

вы ищете setattr():

def __init__(self, details):
    for field,value in details.iteritems():
        setattr(self, field, value)
2 голосов
/ 01 ноября 2011

Вы можете использовать Букет Алекса Мартелли :

class Car(Base):    
    def __init__(self, details):
        self.__dict__.update(details)

Обратите внимание, что если вы измените __init__ подпись вызова на def __init__(self, **details):

class Car(Base):    
    def __init__(self, **details):
        super(Car,self).__init__(**details)

тогда вы можете сделать инициализацию Car еще проще:

car=Car(make='Dodge',model='Ram')
0 голосов
...