小编Joe*_*son的帖子

你可以动态地将类变量添加到子类python吗?

我在python中有大量的自动生成的类,它们实际上代表了部分通信协议的枚举,它们看起来像这样

# definitions.py

class StatusCodes(ParamEnum):
    Success = 1
    Error = 2
    UnexpectedAlpaca = 3

class AlpacaType(ParamEnum):
    Fuzzy = 0
    ReallyMean = 1

# etc etc etc
Run Code Online (Sandbox Code Playgroud)

以这种方式定义事物使得自动发生器和人类都可以轻松修改.ParamEnum类提供来自传入网络数据等的所有功能,获取/设置,比较,转换和创建.

但是,这些类需要一些额外的元数据.我希望添加这个到每个类别中的源定义,虽然,因为它使得它的可读性和将打破自动发生器

目前我正在这样做

# param_enum.py

class ParamEnum(object):
    def __init__(self):
        self.__class__._metadata = get_class_metadata(self.__class__)
Run Code Online (Sandbox Code Playgroud)

然而,这对我来说有点低效,因为每次我们实例化其中一个枚举(经常发生)时都会发生这种情况,而不仅仅是定义(元数据不会改变,所以它只需要设置一次)

我尝试将其添加到定义文件的底部,但也遇到了问题.

class StatusCodes(ParamEnum):
    Success = 1
    Error = 2
    UnexpectedAlpaca = 3

for var in locals():  # or globals? 
    add_metadata(var)
    #doesn't work because it is in the same file, modifying dict while iteratng
Run Code Online (Sandbox Code Playgroud)

在定义类时,是否有一种方法在python中覆盖/添加功能,可以继承到子类?理想情况下,我喜欢这样的东西

class ParamEnum(object):
    def __when_class_defined__(cls):
        add_metadata(cls)
Run Code Online (Sandbox Code Playgroud)

python inheritance

7
推荐指数
1
解决办法
774
查看次数

标签 统计

inheritance ×1

python ×1