1. Python继承机制深度解析
作为一名使用Python多年的开发者,我发现很多初学者对继承机制的理解停留在表面。今天我就结合自己踩过的坑,带大家彻底搞懂Python继承的那些事儿。
继承是面向对象编程的三大特性之一,它允许我们基于已有类创建新类,实现代码复用和层次化设计。Python的继承机制看似简单,实则暗藏玄机,特别是在多继承场景下,方法解析顺序(MRO)常常让人头疼。下面我们就从基础到进阶,一步步拆解Python继承的核心机制。
1.1 单继承的基本用法
单继承是最简单的继承形式,子类只继承一个父类。我们先看一个典型例子:
python复制class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print(f"我是{self.name},今年{self.age}岁")
class Student(Person):
pass
s = Student("张三", 20)
s.say_hello() # 输出:我是张三,今年20岁
这里Student类继承了Person类,自动获得了父类的__init__和say_hello方法。这种"拿来主义"是继承最直观的体现。
注意:在Python中,所有类默认继承自object类,即使你没有显式指定。这就是为什么我们能在自定义类上调用
__str__等方法。
1.2 方法重写的原理与实现
当子类需要改变父类行为时,可以通过方法重写实现:
python复制class Student(Person):
def say_hello(self):
print(f"我是学生{self.name},就读于{self.school}")
def __init__(self, name, age, school):
super().__init__(name, age)
self.school = school
s = Student("李四", 18, "清华大学")
s.say_hello() # 输出:我是学生李四,就读于清华大学
这里有三点需要注意:
- 子类
__init__中必须调用super().__init__()来初始化父类属性 - 方法重写遵循"就近原则":Python会先在子类中查找方法,找不到才去父类
- 重写时可以完全覆盖,也可以在父类方法基础上扩展
1.3 多继承的方法解析顺序(MRO)
Python支持多继承,这带来了强大的灵活性,但也增加了复杂性。看这个例子:
python复制class A:
def test
