Python 面向对象三大特性:封装、继承与多态,一篇讲透!
·
在 Python 编程中,面向对象编程(OOP)是构建复杂、可维护代码的核心思想,而封装、继承、多态正是支撑这一思想的三大基石。今天,我们就结合代码示例,一步步拆解这三个特性的用法与底层逻辑,帮你彻底搞懂 Python 面向对象的精髓。
一、封装:把 “细节藏起来”,把 “接口露出来”
封装的核心逻辑,就是隐藏对象的内部实现细节,只对外暴露可控的访问接口。在 Python 中,这一特性主要通过私有属性 / 方法和公有的 getter/setter 方法来实现。
1. 什么是私有成员?
Python 中,以双下划线__开头的属性或方法,会被标记为 “私有”,这类成员无法在类的外部直接访问,只能在类的内部使用。
2. 封装的使用与验证
我们通过实例化对象,验证私有成员的访问限制,以及公有接口的作用:
3. 封装的核心价值
- 数据安全:私有属性无法被外部随意修改,避免了非法赋值导致的数据混乱;
- 代码可控:通过 getter/setter 接口,我们可以在修改数据时添加校验逻辑(比如年龄不能为负数);
- 解耦简化:外部调用者无需关心类的内部实现,只需要知道如何使用接口即可,降低了代码的耦合度。
二、继承:代码复用的 “传家宝”
继承是面向对象中实现代码复用的核心机制,子类可以继承父类的非私有属性和方法,同时也可以扩展自己的功能,甚至重写父类的方法。
1. 继承的基础概念
- 所有 Python 类默认继承自
object类,它是所有类的 “公共父类”; - 子类可以继承父类的非私有成员,父类无法访问子类的成员;
- 支持单一继承(一个子类继承一个父类)和多继承(一个子类继承多个父类)。
2. 继承的代码示例
我们先定义一个父类Person,再通过多个子类演示不同的继承场景:
继承的关键细节
- 多继承的优先级:当多个父类存在同名属性 / 方法时,子类会优先使用排在前面的父类的成员(比如
Son(Father, Mother)中,优先继承 Father 的属性); - super () 的用法:
super()可以用来调用父类的方法,在访问父类函数时,super()方式不需要加self,而直接用父类名访问需要传递self; - 方法重写:子类可以定义和父类同名的方法,执行时会优先调用子类的方法,这也是多态的基础。
三、多态:一个接口,多种实现
多态的字面意思是 “多种状态”,在 Python 中,多态的核心表现是:同一个父类的不同子类,在调用相同方法时,会执行不同的逻辑,得到不同的结果。Python 天生支持多态,不需要像 Java 那样声明数据类型。
1. 多态的核心逻辑
多态的实现,依赖于继承和方法重写:
- 定义一个父类,包含一个通用的方法;
- 多个子类继承父类,并重写父类的通用方法;
- 不同子类的对象,调用同一个方法时,会执行各自重写后的逻辑。
2. 完善多态示例
我们基于上面的代码,补充 Daughter 类的方法重写,完整演示多态:
3. 多态的价值
- 代码灵活性:同一个接口可以适配不同的子类实现,新增子类时无需修改原有代码;
- 扩展性强:后续添加新的子类时,只需要继承父类并重写方法,就能无缝接入多态逻辑;
- 解耦效果:调用者只需要关心父类的接口,不需要知道具体子类的实现细节,降低了代码的耦合度。
更多推荐


所有评论(0)