class Base(object): def __init__(self): print("enter Base") print("leave Base") class A(Base): def __init__(self): print("enter A") super().__init__() print("leave A") class B(Base): def __init__(self): print("enter B") super().__init__() print("leave B") class C(A, B): def __init__(self): print("enter C") super().__init__() print("leave C") c = C()
时间: 2024-04-23 11:25:02 浏览: 112
这是一个 Python 的多重继承示例,其中定义了 Base、A、B 和 C 四个类。Base 是一个基类,A 和 B 都继承自 Base,而 C 继承自 A 和 B 两个类。在 C 的构造函数中,通过 super() 调用了 A、B、Base 三个类的构造函数,并分别打印出了相应的信息。
当创建 C 的实例 c 时,会依次调用 A、B、Base 三个类的构造函数,并打印出如下信息:
enter C
enter A
enter B
enter Base
leave Base
leave B
leave A
leave C
可以看出,构造函数的调用顺序是按照类的继承顺序,从左到右、从下到上的顺序进行的。这种调用方式被称为 C3 线性化算法,它可以解决多重继承时的方法调用顺序的问题。
相关问题
RuntimeError: '__init__' method of object's base class (com) not called.
RuntimeError: '__init__' method of object's base class not called 这种错误通常是当你试图创建一个新的类实例时,该类没有正确地初始化其基类的`__init__`方法。`__init__`方法是所有类的默认构造函数,负责在创建新对象时进行必要的设置和初始化工作。
举个例子,假设你有这样一个结构:
```python
class BaseClass:
def __init__(self):
print("BaseClass init")
class MyClass(BaseClass):
pass
my_object = MyClass()
```
如果`MyClass`没有像上面那样覆盖`__init__`方法并调用基类的`__init__`,那么当你尝试创建`my_object`时就会触发这个错误,因为`BaseClass`的`__init__`没有被调用。
修复这个问题的方法是确保在派生类中明确地调用了基类的`__init__`:
```python
class MyClass(BaseClass):
def __init__(self):
super().__init__() # 调用基类的__init__
```
阅读全文