Создайте класс Python, где атрибуты определяются динамически - PullRequest
5 голосов
/ 01 марта 2011

Извините, если об этом спрашивали раньше. Можно ли динамически создавать класс в Python, если атрибуты не определены в методе __init__ класса.

Например, с этим классом

class Person(object):
  def __init__(self):
    ...

Я могу динамически вставлять атрибуты во время инициализации следующим образом:

person = Person(name='Joe')

и получить к нему доступ так:

person.name
>>> Joe

Спасибо

Ответы [ 2 ]

14 голосов
/ 01 марта 2011

Самый простой способ сделать это - назначить ключевое слово аргумент dict атрибуту __dict__ класса:

class Person(object):
    def __init__(self, **kw):
        self.__dict__ = kw
person = Person(name='Joe')
print person.name

print

Joe

Чтобы добавить атрибуты после объектасоздание, используйте

def add_attributes(self, **kw):
    self.__dict__.update(kw)

Вы также можете использовать .update() в конструкторе.

0 голосов
/ 01 марта 2011

Это может быть достигнуто с помощью дескрипторов ( подробное объяснение ).Это также позволяет добавлять атрибуты после создания объекта.

...