在学习完类与对象的基本概念之后,我们就能更深入地理解 Python 面向对象编程(OOP)的强大之处。而其中的“继承”与“多态”,正是让代码更加简洁、灵活、可扩展的核心机制。
一、继承(Inheritance)是什么
继承可以理解为“子类继承父类的特性与行为”,即子类可以使用父类的属性和方法,同时还能在此基础上扩展或重写。
例如,我们定义一个 Animal 类作为父类:
class Animal: def __init__(self, name): self.name = name def speak(self): print("动物在发出声音")
再定义一个 Dog 类继承 Animal:
class Dog(Animal): def speak(self): print(f"{self.name}:汪汪!")
使用时:
dog = Dog("旺财") dog.speak()
输出结果:
旺财:汪汪!
✅ 可以看到,Dog 类继承了 Animal 的属性 name,但重写了 speak() 方法,表现出不同的行为。
二、继承的优势
- 1. 代码复用:不用重复编写相同逻辑。
- 2. 结构清晰:通过层次关系组织代码,易于维护。
- 3. 便于扩展:新增子类即可扩展新功能,而不必修改已有代码(符合“开闭原则”)。
三、调用父类方法
有时候子类希望在保留父类功能的同时增加新的逻辑,可以用 super() 调用父类方法。
class Cat(Animal): def speak(self): super().speak() # 调用父类方法 print(f"{self.name}:喵喵!")
执行:
cat = Cat("花花") cat.speak()
输出:
动物在发出声音 花花:喵喵!
四、多态(Polymorphism)是什么
多态意味着“同样的方法调用,可以表现出不同的行为”。
例如,定义多个子类,每个类实现自己的 speak() 方法:
animals = [Dog("小黑"), Cat("小花"), Animal("未知")] for a in animals: a.speak()
输出:
小黑:汪汪! 小花:喵喵! 动物在发出声音
即使我们调用的是同一个方法 speak(),但不同对象展示了不同的结果——这就是多态。
五、Python的动态多态特性
Python 是动态类型语言,不需要像 Java 那样显式声明接口,只要对象实现了所需的方法,就可以被同样地调用。这种特性被称为 “鸭子类型(Duck Typing)”。
“如果它看起来像鸭子,叫起来像鸭子,那它就是鸭子。”
class Duck: def speak(self): print("嘎嘎!") class Person: def speak(self): print("你好,我能模仿鸭子!") def make_it_speak(obj): obj.speak() make_it_speak(Duck()) make_it_speak(Person())
输出:
嘎嘎! 你好,我能模仿鸭子!
六、总结
| 概念 | 说明 |
| 继承 | 子类复用父类属性和方法 |
| 重写 | 子类覆盖父类方法以实现新功能 |
| 多态 | 不同对象对同一方法调用表现不同 |
| super() | 调用父类方法 |
| 鸭子类型 | 只要行为相同,不必强制类型继承 |
继承与多态让代码更具层次与灵活性,是构建大型 Python 程序的重要思想。