1. Python继承机制的核心概念
在Python中,继承是面向对象编程的三大特性之一(封装、继承、多态)。它允许我们定义一个类(子类)来继承另一个类(父类)的属性和方法。这种机制极大地提高了代码的复用性和可维护性。
1.1 单继承的基本实现
单继承是最简单的继承形式,子类只继承一个父类。让我们看一个基础示例:
python复制class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return "Some generic sound"
class Dog(Animal):
def speak(self):
return "Woof!"
my_dog = Dog("Buddy")
print(my_dog.name) # 输出: Buddy
print(my_dog.speak()) # 输出: Woof!
在这个例子中:
Animal是父类,定义了name属性和speak()方法Dog是子类,继承了Animal的所有特性Dog重写了speak()方法,实现了自己的行为- 子类可以直接访问父类的属性(如
name)
1.2 方法重写与扩展
子类可以完全重写父类的方法,也可以在父类方法的基础上进行扩展。后者通常更实用:
python复制class Cat(Animal):
def __init__(self, name, color):
super().__init__(name) # 调用父类的__init__
self.color = color # 添加新属性
def speak(self):
parent_speak = super().speak() # 调用父类的speak方法
return f"{parent_speak} But I say Meow!"
my_cat = Cat("Whiskers", "black")
print(my_cat.speak()) # 输出: Some generic sound But I say Meow!
这里的关键点:
- 使用
super().__init__()确保父类的初始化逻辑被执行 - 可以在子类中添加新的属性(
color) - 通过
super().speak()调用父类方法,然后在其基础上扩展
注意:当子类重写
__init__方法时,如果不显式调用父类的__init__,父类的初始化逻辑将不会执行,这可能导致属性缺失或对象状态不正确。
1.3 继承链与属性查找
Python使用一种称为方法解析顺序(MRO)的算法来确定属性的查找顺序。对于单继承,这很简单 - 从子类开始,沿着继承链向上查找:
python复制class A:
def test(self):
return "A"
class B(A):
def test(self):
return "B"
class C(B):
pass
obj = C()
prin
