Эй, я только начал задумываться об этом, когда наткнулся на код, который ожидал объект с определенным набором атрибутов (но без указания типа этого объекта).
Одним из решений было бы создание нового класса с атрибутами, ожидаемыми в коде, но, поскольку я вызываю другой код, которому также нужны объекты с (другими) атрибутами, мне пришлось бы создавать все больше и больше классов.
Более коротким решением является создание универсального класса, а затем установка атрибутов для его экземпляров (для тех, кто думал об использовании экземпляра object
вместо создания нового класса, который не будет работать с * 1006). * экземпляры не допускают новые атрибуты).
Последнее, самое короткое решение, которое я придумал, - это создание класса с конструктором, который принимает аргументы ключевых слов, как конструктор 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)?