我有一系列的类,它们都继承自共享一个基类的几个可能的父类中的一个。每个类都有一个基于基类 parameters
parameters
from copy import deepcopy
class BaseClass:
parameters = {
'example_param1': ParamObject(name='example_param1', editable=True),
}
class MiddleClass(Baseclass):
parameters = {
**deepcopy(Baseclass.parameters),
'example_param2': ParamObject(name='example_param2', editable=False),
}
class ChildClass(MiddleClass):
parameters = {
**deepcopy(MiddleClass.parameters),
'example_param3': ParamObject(name='example_param3', editable=True),
}
这个实现完成了工作,但我发现 **deepcopy(Baseclass.parameters),
行不令人满意。随着时间的推移,这些子类将由只对编码有基本了解的人进行编辑,因此我想让代码尽可能简单,并且可以剪切和粘贴。
有什么我可以在类范围内调用以获得 super().__class__
的等价物吗?我希望用户能够将基类从 MiddleClass
更改为 MiddleClass2
而无需记住在多个位置更改基类。
最佳答案
您可以使用 __init_subclass__
将来自父类的参数直接添加到显式定义的 parameters
属性,但代价是颠倒插入顺序(如果有的话)。
class ParameterBase:
def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
for pc in cls.__bases__:
d = getattr(pc, 'parameters', {})
cls.parameters.update(d)
class BaseClass(ParameterBase):
parameters = {
'example_param1': ParamObject(name='example_param1', editable=True),
}
class MiddleClass(BaseClass):
parameters = {
'example_param2': ParamObject(name='example_param2', editable=False),
}
class ChildClass(MiddleClass):
parameters = {
'example_param3': ParamObject(name='example_param3', editable=True),
}
关于python - 有没有办法从类范围引用对象的基类 __class__ ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65098154/