继承实现代码复用与功能扩展,子类通过 class Child(Parent) 继承并可重写方法或用 super() 调用父类;封装通过 、_ 约定和 property 控制访问;多态依赖鸭子类型,同一接口不同实现。

类继承:复用代码与扩展功能
继承让子类自动获得父类的属性和方法,是代码复用的核心机制。定义子类时在括号中写上父类名即可,比如 class Dog(Animal): 表示 Dog 继承自 Animal。子类可以重写父类方法(如重写 make_sound() 让不同动物发出不同声音),也可以用 super().method_name() 调用父类实现。注意:Python 支持多继承,但应谨慎使用,避免方法解析顺序(MRO)带来的歧义。
封装:控制访问与隐藏实现细节
封装通过访问权限管理保护对象内部状态。Python 没有 strict 的 private 关键字,但约定用单下划线 _name 表示“受保护”,双下划线 __age 触发名称改写(name mangling),使其不易被外部直接访问。实际开发中更推荐用 property 装饰器定义属性的 getter 和 setter,既能校验输入(如年龄不能为负),又保持调用语法简洁:
- @property 把方法变成只读属性
- @attr_name.setter 控制赋值逻辑
- 避免直接暴露底层数据结构
多态:同一接口,多种行为
多态体现为“不同类的对象调用相同方法,产生不同结果”。它不依赖继承关系强制绑定,而依赖“鸭子类型”——只要对象有对应方法,就能传入函数处理。例如函数 def speak(animal): animal.make_sound() 可接受 Dog、Cat 或 Bird 实例,无需检查类型。实现多态的关键是:父类定义通用接口(可为空实现或抛出 NotImplementedError),子类各自实现;调用方只依赖接口,不关心具体类型。
实践建议:从简单开始,逐步加深
初学时先写一个基类(如 Shape),再派生 Circle 和 Rectangle,分别实现 area() 方法。运行时用列表存多个形状对象,遍历调用 area(),直观感受多态效果。调试时用 isinstance(obj, Class) 或 hasattr(obj, 'method') 辅助判断,但生产代码中应尽量减少类型检查,信任接口契约。封装和继承配合使用,能让类结构清晰、职责分明,也便于后期维护和单元测试。
立即学习“Python免费学习笔记(深入)”;











