通过多重继承调用父类init
在使用多重继承的场景中,确保调用所有父类构造函数。两种常见的方法是:
-
ParentClass.__init__(self)(旧式)
-
super(DerivedClass, self).__init__() (较新风格)
但是,如果父类不遵循一致的约定,这些方法可能会失败。
确定正确的方法
适当的方法取决于基类是否设计为多重继承:
1。独立基类
- 不适合多重继承。
-
使用以下任一方法手动调用每个父构造函数:
-
没有 super: Foo.__init__(self), Bar.__init__(self)
-
与 super: super().__init__() (对于 Foo 之前的所有构造函数),super(Foo, self).__init__(bar) (对于Foo 之后的所有构造函数)
2. Mixins
- 专为多重继承而设计。
- 在 mixin 类中使用 super().__init__(),它会自动调用下一个构造函数。
- 首先继承 mixin,例如 class FooBar(FooMixin,吧)。
3。为协作继承而设计的类
- 与 mixin 类似,但所有参数都作为关键字参数传递。
- 在所有类中调用 super().__init__()。
- 基类的顺序不
其他注意事项
- 对于对象子类,避免调用 super().__init__()。
- 对于独立类,如果直接从对象继承,则始终提供一个空构造函数(例如,class Base(object): def __init__(self): pass)。
最终,正确的实现取决于所涉及的类。如果一个类是为多重继承而设计的,则应该相应地记录它。否则,假设它不是为此类场景设计的。
以上是如何在多重继承中正确调用父类 __init__` 方法?的详细内容。更多信息请关注PHP中文网其他相关文章!