【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. 避免钻石继承:复杂继承可能导致维护困难。
相关推荐
妮妮喔妮几秒前
【无标题】
开发语言·前端·javascript
花好月圆春祺夏安3 分钟前
基于odoo17的设计模式详解---装饰模式
数据库·python·设计模式
fie88895 分钟前
浅谈几种js设计模式
开发语言·javascript·设计模式
喝可乐的布偶猫12 分钟前
Java类变量(静态变量)
java·开发语言·jvm
喝可乐的布偶猫1 小时前
韩顺平之第九章综合练习-----------房屋出租管理系统
java·开发语言·ide·eclipse
江山如画,佳人北望1 小时前
C#程序入门
开发语言·windows·c#
萧鼎1 小时前
深度探索 Py2neo:用 Python 玩转图数据库 Neo4j
数据库·python·neo4j
华子w9089258592 小时前
基于 Python Django 和 Spark 的电力能耗数据分析系统设计与实现7000字论文实现
python·spark·django
kikikidult2 小时前
(2025.07)解决——ubuntu20.04系统开机黑屏,左上角光标闪烁
笔记·ubuntu
coding随想2 小时前
JavaScript中的BOM:Window对象全解析
开发语言·javascript·ecmascript