我所知道
的 Python 数据类允许继承,无论是使用数据类还是类。在最佳实践中(以及在其他语言中),当我们进行继承时,应该首先调用初始化。在 Python 中是:
def __init__(self):
super().__init__()
...
我在做什么
由于数据类是在 Python 3.7 中引入的,我正在考虑用数据类替换我的所有类。使用数据类,它的好处之一就是__init__
为您生成。当数据类需要继承基类时,这并不好——例如:
class Base:
def __init__(self):
self.a = 1
@dataclass
class Child(Base):
a:int
def __post_init__(self):
super().__init__()
我
的问题问题是我们必须把超级初始化调用放在里面__post_init__
,实际上是在数据类的init之后调用的。
缺点是我们失去了约定契约,初始化混乱导致我们不能覆盖超类的属性。
可以通过 的概念来解决__pre_init__
。我已经阅读了该文件,并没有看到与该概念有任何关系。我错过了什么吗?