Skip to content

继承与MRO:复用代码与多重继承 ​

单继承 ​

python
class Animal:
    def __init__(self, name):
        self.name = name
    
    def speak(self):
        return "Some sound"

class Dog(Animal):
    def speak(self):
        return f"{self.name} barks"

dog = Dog("Buddy")
print(dog.speak())  # Buddy barks

super()调用父类方法 ​

python
class Vehicle:
    def __init__(self, brand):
        self.brand = brand

class Car(Vehicle):
    def __init__(self, brand, model):
        super().__init__(brand)
        self.model = model

car = Car("Toyota", "Camry")
print(car.brand, car.model)  # Toyota Camry

多重继承与MRO ​

python
class A:
    def method(self):
        print("A")

class B(A):
    def method(self):
        print("B")
        super().method()

class C(A):
    def method(self):
        print("C")
        super().method()

class D(B, C):
    def method(self):
        print("D")
        super().method()

d = D()
d.method()
# 输出:D B C A

# 查看MRO
print(D.__mro__)
# (<class 'D'>, <class 'B'>, <class 'C'>, <class 'A'>, <class 'object'>)

练习 ​

  1. 形状继承:Shape基类,Circle和Rectangle子类实现area()。
  2. super()链:三层继承中使用super()。
  3. 多重继承:Mixin模式实现日志功能。

答案:第四章答案

下一节:特殊方法

用心记录每一步成长