【发布时间】:2025-12-10 15:25:01
【问题描述】:
我试图想出一种方法来允许在实例化时指定任意数量的类属性,这与字典非常相似。理想用例:
>>> 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])
这样的父类怎么做?
注意: 是的,我知道我想做的是不好的做法。但有时你只需要按照老板告诉你的去做。
【问题讨论】:
-
是因为这是一个问得不好的问题,还是因为我试图做的事情不被接受?如果是前者:好的,请发表评论或建议编辑。如果是后者:这似乎没有必要。好的/坏的做法可以在答案和 cmets 中解决,这对未来的读者很有帮助。
-
什么是
@Specifiable.specifiable??顺便说一句,我没有投反对票,只是注意到这个问题是一年前的...... -
@juanpa.arrivillaga 这是我为帮助我实现
BlankStruct所需功能而创建的父类。 (不过,正如问题中所述,它没有按预期工作。)它在第三个代码块中定义。