如何解决__post_init __用于多个继承的数据类
试图评估数据类是否适合即将到来的项目,但现在我受此代码困扰:
from dataclasses import dataclass
@dataclass
class MixinA:
attrA: int
def __post_init__(self):
print('MixinA post_init')
self.attrA = [self.attrA]
@dataclass
class MixinB:
attrB: str
def __post_init__(self):
print('MixinB post_init')
self.attrB = [self.attrB]
@dataclass
class MixinC:
attrC: bool
def __post_init__(self):
print('MixinC post_init')
self.attrC = [self.attrC]
@dataclass
class Inherited(MixinC,MixinB,MixinA):
pass
obj = Inherited(4,'Hello',False)
print(obj.attrA,obj.attrB,obj.attrC)
print(obj.__class__.mro())
令我惊讶的是,当我期望所有三个基类都被调用时,仅调用第一个基类中的__post_init__()
:
MixinC post_init
4 Hello [False]
[<class '__main__.Inherited'>,<class '__main__.MixinC'>,<class '__main__.MixinB'>,<class '__main__.MixinA'>,<class 'object'>]
此外,改变继承对我没有任何好处。继承后将产生与上面完全相同的输出:
class MixinA:
class MixinB(MixinA):
class MixinC(MixinB):
class Inherited(MixinC):
我是用错误的方式编写测试代码,还是当前行为是出于疏忽或故意?
对我来说,核心问题是,我想在生成最终的数据类实例之前转换每个属性。实际的继承规模更大,并且在每个类中进行继承都是非常多余的。
如果__post_init__()
不可行,是否有其他替代方法(例如InitVar
或自定义__init__()
)?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。