挑战14天学会Python,第11天学习笔记!加油!
一、核心概念总览
概念 | 英文 | 定义 | 作用 | 典型应用场景 |
---|---|---|---|---|
继承性 | Inheritance | 子类自动获得父类的属性和方法 | 代码复用、建立类层次关系 | 构建类层次结构 |
多继承 | Multiple Inheritance | 子类同时继承多个父类 | 组合不同功能 | 混合功能组合 |
方法重写 | Method Overriding | 子类重新定义父类方法 | 实现特定行为 | 定制化行为 |
二、继承性(Inheritance)深度解析
(一)基础定义
继承是面向对象编程的核心机制,允许子类:
- 自动获得父类的所有属性和方法
- 扩展父类功能
- 重写父类方法
(二)完整语法
class Parent:
def __init__(self, name):
self.name = name
def greet(self):
return f"Hello, {self.name}!"
class Child(Parent): # 继承Parent
def __init__(self, name, age):
super().__init__(name) # 调用父类构造方法
self.age = age
def greet(self): # 重写方法
return f"Hi, {self.name}! You are {self.age} years old."
# 使用
child = Child("Alice", 25)
print(child.greet()) # Hi, Alice! You are 25 years old.
(三)继承链详解
单继承链:
class A: pass class B(A): pass class C(B): pass
形成:A → B → C 的继承链。
继承链特性:
- 子类可以访问父类的所有非私有成员
- 子类可以重写父类方法 继承链查找顺序:子类 → 父类 → 父类的父类 → ...
(四)继承的作用
- 代码复用:避免重复代码
- 层次结构:建立清晰的类层次
- 扩展性:轻松添加新功能
- 多态性:实现运行时多态
三、多继承(Multiple Inheritance)深度解析
(一)基础定义
多继承允许一个子类同时继承多个父类,语法为:
class Child(Parent1, Parent2, ...):
pass
(二)完整示例
class Walker:
def walk(self):
return "I can walk."
class Swimmer:
def swim(self):
return "I can swim."
class Amphibian(Walker, Swimmer):
def move(self):
return f"{self.walk()} and {self.swim()}"
# 使用
frog = Amphibian()
print(frog.move())) # I can walk. and I can swim.
(三)多继承特性
方法解析顺序(MRO):
- Python使用C3线性化算法确定方法查找顺序
- 可通过
类名.__mro__
查看顺序
print(Amphibian.__mro__) # 输出: (__main__.Amphibian, __main__.Walker, __main__.Swimmer, object)
钻石继承问题:
class A: pass class B(A): pass class C(A): pass class D(B, C): pass
Python的MRO机制确保不会出现传统钻石继承问题。
(四)多继承的作用
- 功能组合:组合不同类的功能
- 代码复用:避免重复代码
- 灵活性:灵活组合不同功能
(五)注意事项
- 避免过度使用多继承
- 注意方法冲突
- 理解MRO机制
四、方法重写(Method Overriding)深度解析
(一)基础定义
方法重写是指子类重新定义父类方法的行为。
(二)完整示例
class Animal:
def speak(self):
return "Animal sound"
class Dog(Animal):
def speak(self): # 重写方法
return "Woof!"
class Cat(Animal):
def speak(self): # 重写方法
"Meow!"
# 使用
animal = Animal()
dog = Dog()
cat = Cat()
print(animal.speak()) # Animal sound
print(dog.speak()) # Woof!
print(cat.speak()) # Meow!
(三)重写规则
- 方法签名一致:方法名和参数列表相同
- 访问权限:不能比父类方法更严格
- 返回值:可以不同,但建议保持一致
(四)高级用法
调用父类方法:
class Dog(Animal): def speak(self): return super().speak() + " - Woof!"
(五)作用
- 行为定制:实现特定行为
- 多态实现:实现运行时多态
- 代码扩展:扩展父类功能
五、综合应用案例
(一)完整继承链
class Vehicle:
def move(self):
return "Moving..."
class Car(Vehicle):
def move(self):
return "Driving..."
class ElectricCar(Car):
def move(self):
return "Driving silently..."
# 使用
ev = ElectricCar()
print(ev.move()) # Driving silently...
(二)多继承与重写
class A:
def speak(self): return "A"
class B(A):
def speak(self): return "B"
class C(A):
def speak(self): return "C"
class D(B, C):
def speak(self):
return "D - " + super().spe() + " - " + A().spe()
print(D().speak())) # D - B - A
六、最佳实践与注意事项
- 合理使用继承:避免过度继承,保持继承链简洁。
- 优先组合:功能组合优于多继承。
- 文档说明:为复杂继承关系添加文档说明。
- 测试覆盖:确保所有继承路径的测试覆盖。
- 避免钻石继承:复杂继承可能导致维护困难。