【Day 11-N22】Python类(3)——Python的继承性、多继承、方法重写

挑战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.

(三)继承链详解

  1. 单继承链

    复制代码
    class A: pass
    class B(A): pass
    class C(B): pass

    形成:A → B → C 的继承链。

  2. 继承链特性

    • 子类可以访问父类的所有非私有成员
    • 子类可以重写父类方法 继承链查找顺序:子类 → 父类 → 父类的父类 → ...

(四)继承的作用

  1. 代码复用:避免重复代码
  2. 层次结构:建立清晰的类层次
  3. 扩展性:轻松添加新功能
  4. 多态性:实现运行时多态

三、多继承(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.

(三)多继承特性

  1. 方法解析顺序(MRO)

    • Python使用C3线性化算法确定方法查找顺序

    • 可通过类名.__mro__查看顺序

      print(Amphibian.mro)

      输出: (main.Amphibian, main.Walker, main.Swimmer, object)

  2. 钻石继承问题

    复制代码
    class A: pass
    class B(A): pass
    class C(A): pass
    class D(B, C): pass

    Python的MRO机制确保不会出现传统钻石继承问题。

(四)多继承的作用

  1. 功能组合:组合不同类的功能
  2. 代码复用:避免重复代码
  3. 灵活性:灵活组合不同功能

(五)注意事项

  • 避免过度使用多继承
  • 注意方法冲突
  • 理解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!

(三)重写规则

  1. 方法签名一致:方法名和参数列表相同
  2. 访问权限:不能比父类方法更严格
  3. 返回值:可以不同,但建议保持一致

(四)高级用法

  1. 调用父类方法

    复制代码
    class Dog(Animal):
        def speak(self):
            return super().speak() + " - Woof!"

(五)作用

  1. 行为定制:实现特定行为
  2. 多态实现:实现运行时多态
  3. 代码扩展:扩展父类功能

五、综合应用案例

(一)完整继承链

复制代码
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

六、最佳实践与注意事项

  1. 合理使用继承:避免过度继承,保持继承链简洁。
  2. 优先组合:功能组合优于多继承。
  3. 文档说明:为复杂继承关系添加文档说明。
  4. 测试覆盖:确保所有继承路径的测试覆盖。
  5. 避免钻石继承:复杂继承可能导致维护困难。
相关推荐
安娜的信息安全说7 分钟前
LangGraph:构建智能工作流的新方式
python·ai·langgraph
代码or搬砖8 分钟前
Collections和Arrays
java·开发语言
Yiii_x11 分钟前
Object类与包装类
java·经验分享·笔记·课程设计·ai编程
四谎真好看11 分钟前
MySQL 学习笔记(运维篇1)
运维·数据库·笔记·学习·mysql·学习笔记
吴名氏.19 分钟前
电子书《Java程序设计与应用开发(第3版)》
java·开发语言·java程序设计与应用开发
于慨31 分钟前
dayjs处理时区问题、前端时区问题
开发语言·前端·javascript
爱吃泡芙的小白白38 分钟前
如何在现有配置好环境的Pycharm中安装jupyterlab这个工具
ide·python·pycharm·notebook·虚拟环境·jupyterlab
listhi52040 分钟前
基于MATLAB的LTE系统仿真实现
开发语言·matlab
ss2731 小时前
ScheduledThreadPoolExecutor异常处理
java·开发语言
hssfscv1 小时前
Javaweb学习笔记——Web
笔记·学习·web