我试图想出一种方法,允许在实例化时指定任意数量的类属性,非常类似于字典。理想用例:
>>> 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])
我怎样才能建立这样一个父类呢?你知道吗
是的,您可以执行以下操作,但是我不建议这样做,因为这显然违背了显式优于隐式原则:
一个更完整的答案是可用的here并启发了这个答案。你知道吗
我建议在你希望你的类拥有的属性方面要显式的。否则,您将得到一个具有高度可变性的类,这可能会降低它的有用性。你知道吗
我相信你不用装饰师也能做到:
相关问题 更多 >
编程相关推荐