gpt4 book ai didi

python - 有没有办法从类范围引用对象的基类 __class__ ?

转载 作者:行者123 更新时间:2023-12-04 00:52:53 25 4
gpt4 key购买 nike

我有一系列的类,它们都继承自共享一个基类的几个可能的父类中的一个。每个类都有一个基于基类 parameters

的类作用域 Dict[str, object] 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com