Эй, я только начинал задумываться об этом, когда натолкнулся на код, ожидающий объекта с определенным набором атрибутов (но без указания того, какой тип должен быть для этого объекта).
Одним из решений было бы создать новый класс с атрибутами, ожидаемыми кодом, но поскольку я вызываю другой код, которому также нужны объекты с (другими) атрибутами, мне придется создавать все больше и больше классов.
Более короткое решение - создать общий класс, а затем установить атрибуты в его экземплярах (для тех, кто думал об использовании экземпляра object
вместо создания нового класса, который не будет работать с object
экземпляры не допускают новых атрибутов).
Последнее, самое короткое решение, с которым я столкнулся, состояло в том, чтобы создать класс с конструктором, который принимает аргументы ключевого слова, как конструктор dict
, а затем устанавливает их как атрибуты:
class data:
def __init__(self, **kw):
for name in kw:
setattr(self, name, kw[name])
options = data(do_good_stuff=True, do_bad_stuff=False)
Но я не могу не чувствовать, что я пропустил что-то очевидное... Не существует ли встроенного способа сделать это (желательно поддерживается в Python 2.5)?