Я пытаюсь найти способ, позволяющий задавать любое количество атрибутов класса при создании экземпляра, очень похожий на словарь. Идеальный вариант использования:
>>> instance = BlankStruct(spam=0, eggs=1)
>>> instance.spam
0
>>> instance.eggs
1
где BlankStruct определяется как:
class BlankStruct(Specifiable):
@Specifiable.specifiable
def __init__(self, **kwargs):
pass
Я думал об использовании декоратора родительского класса, но теряюсь в мысли о том, использовать ли методы экземпляра, методы класса или статические методы (или, возможно, ничего из вышеперечисленного!). Это лучшее, что я придумал до сих пор, но проблема в том, что атрибуты применяются к классу, а не к экземпляру:
class Specifiable:
@classmethod
def specifiable(cls, constructor):
def constructor_wrapper(*args, **kwargs):
constructor(*args, **kwargs)
cls.set_attrs(**kwargs)
return constructor_wrapper
@classmethod
def set_attrs(cls, **kwargs):
for key in kwargs:
setattr(cls, key, kwargs[key])
Как я могу создать такой родительский класс?