继承 #

继承允许子类获得父类的属性和方法。

一、基本继承 #

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

class Dog(Animal):
    def speak(self):  # 方法重写
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

dog = Dog("Buddy")
print(dog.name)    # "Buddy"
print(dog.speak()) # "Woof!"

二、super()函数 #

python
class Animal:
    def __init__(self, name, age):
        self.name = name
        self.age = age

class Dog(Animal):
    def __init__(self, name, age, breed):
        super().__init__(name, age)  # 调用父类方法
        self.breed = breed
    
    def info(self):
        return f"{self.name}, {self.age}, {self.breed}"

dog = Dog("Buddy", 3, "Golden Retriever")

三、多继承 #

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

class B:
    def method(self):
        return "B"

class C(A, B):  # 多继承
    pass

c = C()
print(c.method())  # "A"(MRO决定)

# 查看方法解析顺序
print(C.__mro__)  # (<class 'C'>, <class 'A'>, <class 'B'>, ...)

四、方法重写 #

python
class Shape:
    def area(self):
        return 0

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    def area(self):
        return self.width * self.height

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius
    
    def area(self):
        return 3.14159 * self.radius ** 2

五、抽象类 #

python
from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return "Woof!"

# animal = Animal()  # 错误:不能实例化抽象类
dog = Dog()
print(dog.speak())  # "Woof!"

六、isinstance和issubclass #

python
class Animal:
    pass

class Dog(Animal):
    pass

dog = Dog()

print(isinstance(dog, Dog))      # True
print(isinstance(dog, Animal))   # True
print(issubclass(Dog, Animal))   # True
print(issubclass(Dog, object))   # True

七、总结 #

概念 说明
继承 class Child(Parent):
super() 调用父类方法
多继承 class C(A, B):
MRO 方法解析顺序
重写 子类覆盖父类方法
抽象类 ABC, @abstractmethod
最后更新:2026-03-16