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

标签 python python-3.x oop superclass

我有一系列的类,它们都继承自共享一个基类的几个可能的父类中的一个。每个类都有一个基于基类 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/

相关文章:

python - 两个大圆的交点(纬度/经度)

python - psutil 虚拟内存测量单位?

python - Tkinter - 流向不同的窗口

python - 哪个更好 : `iter` or `while` for looping?

php - 为什么我不能将一个类划分为多个文件

python - 从 Android 客户端调用在 Azure VM 中运行的 python 函数

python - 按操作系统限制 Environment.yml 依赖项

python - 将十六进制字符串转换为 bytes 函数的正确形式

ios - 从子调用父方法?

java - 给物体补水是什么意思?