📌 专栏:Python面向对象全套教程
🔥 阅读收获:彻底掌握类的继承机制、单继承、多继承、方法重写、super()调用父类方法、继承与组合区别,搞定面试所有继承考题。
💡 学习定位:封装(基础)→ 继承(复用)→ 组合(解耦)→ 多态(灵活)
一、什么是继承?
1.1 继承概念
继承是面向对象三大核心特性之一,作用是:让子类自动拥有父类的所有属性和方法,实现代码复用。
生活理解:孩子继承父母的特征与能力,不用重新学习、重新定义。
1.2 继承核心关系(必考)
父类(基类 / 超类):公共模板,存放通用属性和方法
子类(派生类):继承父类,拥有父类功能,还可以扩展自己功能
继承关系:子类 is a 父类
1.3 为什么要用继承?
减少重复代码,大量复用父类逻辑
统一规范,所有子类拥有统一父类接口
便于后期代码扩展、统一维护
二、单继承(最常用)
2.1 语法格式
class 父类名:
# 通用属性、方法
class 子类名(父类名):
# 扩展自己的属性、方法
2.2 实战案例:父类人类,子类学生
# 父类
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def show_info(self):
print(f"姓名:{self.name},年龄:{self.age}")
# 子类:学生 继承 人类
class Student(Person):
# 子类可以直接使用父类所有内容
pass
# 测试
stu = Student("小明", 18)
stu.show_info()
可以看到:子类没有写任何代码,却拥有父类全部功能,这就是继承的魅力。
三、子类扩展自己的功能
继承不只是照搬,子类可以在父类基础上新增属性和方法。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def show_info(self):
print(f"姓名:{self.name},年龄:{self.age}")
# 学生子类:继承 + 扩展
class Student(Person):
def __init__(self, name, age, stu_id):
# 先调用父类构造
super().__init__(name, age)
# 扩展自己独有属性
self.stu_id = stu_id
# 扩展独有方法
def study(self):
print(f"{self.name}(学号{self.stu_id})正在上课学习")
stu = Student("小红", 20, "2026001")
stu.show_info()
stu.study()
核心逻辑:保留父类通用能力,新增子类专属能力。
四、方法重写(override)
重写:子类定义与父类同名方法,覆盖父类逻辑,实现个性化功能。
重写是多态的基础。
class Person:
def work(self):
print("人类进行工作")
class Teacher(Person):
# 重写父类方法
def work(self):
print("老师教书育人")
class Doctor(Person):
# 重写父类方法
def work(self):
print("医生救死扶伤")
t = Teacher()
d = Doctor()
t.work()
d.work()
执行规则:优先调用子类自己的方法,没有才找父类。
五、super() 函数详解(高频考点)
super() 作用:主动调用父类的构造方法或普通方法。
解决问题:子类重写构造后,不会自动继承父类构造,必须手动调用 super。
正确标准写法
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
print(f"{self.name}需要吃东西")
class Dog(Animal):
def __init__(self, name, color):
# 调用父类构造方法
super().__init__(name)
self.color = color
def bark(self):
print(f"{self.name}({self.color})汪汪叫")
dog = Dog("旺财", "黑色")
dog.eat()
dog.bark()
口诀:子类构造第一行,优先 super 父构造。
六、多继承(一个子类继承多个父类)
6.1 语法
class 子类(父类1, 父类2, 父类3):
pass
6.2 实战案例
class Singer:
def sing(self):
print("会唱歌")
class Dancer:
def dance(self):
print("会跳舞")
# 艺人同时继承歌手、舞者
class Star(Singer, Dancer):
pass
s = Star()
s.sing()
s.dance()
6.3 MRO 就近查找原则(面试)
多继承如果出现同名方法,按照 从左到右 继承顺序查找,找到即停止。
可通过 类名.__mro__ 查看查找顺序。
七、继承 VS 组合(终极对比)
配合你上一篇组合博客,形成完整知识体系:
继承 is-a:学生是人类、狗是动物 → 强层级、强复用
组合 has-a:电脑有CPU、人有身份证 → 组件装配、低耦合
开发原则:层级关系用继承,组件关系用组合,优先组合。
八、全文核心总结
继承实现代码复用,子类拥有父类所有属性和方法;
单继承:一个父类,结构简单、最常用;
方法重写:子类覆盖父类方法,实现个性化逻辑;
super() 专门用来调用父类构造和方法;
多继承可同时继承多个父类,遵循MRO从左至右查找;
is-a用继承,has-a用组合。

