当前位置: 首页 > news >正文

结合python面向对象编程,阐述面向对象三大特征

在 Python 中,面向对象编程(OOP)的三大特征——封装、继承、多态——同样适用,但实现方式与其他语言(如 Java)有所不同。下面结合 Python 代码详细说明:


1. ​封装(Encapsulation)​

核心思想

将数据(属性)和操作数据的方法(行为)捆绑在类中,并控制外部访问权限。

Python 的实现

  • Python 没有严格的 private 或 protected 关键字,但通过命名约定实现封装:
    • ​**单下划线 _var**​:约定为“受保护”成员(实际仍可访问)。
    • ​**双下划线 __var**​:触发名称修饰(Name Mangling),避免直接访问。
  • 通过 property 装饰器提供对属性的安全访问。

示例代码

class BankAccount:def __init__(self, balance):self.__balance = balance  # 私有属性(双下划线)# 通过方法暴露私有属性(封装)def get_balance(self):return self.__balancedef deposit(self, amount):if amount > 0:self.__balance += amount# 使用
account = BankAccount(1000)
print(account.get_balance())  # 正确访问
# print(account.__balance)    # 报错:AttributeError

说明

  • Python 的封装更依赖约定而非强制,开发者需自觉遵守访问规则。

2. ​继承(Inheritance)​

核心思想

子类继承父类的属性和方法,并可扩展或重写功能。

Python 的特点

  • 支持单继承多继承​(一个子类可继承多个父类)。
  • 通过 super() 调用父类方法。
  • 所有类默认继承 object(Python 3 中可省略)。

示例代码

class Animal:def __init__(self, name):self.name = namedef speak(self):return "Unknown sound"class Dog(Animal):  # 继承Animaldef speak(self):  # 重写父类方法return "Woof!"class Cat(Animal):def speak(self):return "Meow!"# 使用
dog = Dog("Buddy")
print(dog.name)      # 继承父类属性
print(dog.speak())   # 输出 "Woof!"(子类重写)

多继承示例

class A:def method(self):return "A"class B:def method(self):return "B"class C(A, B):  # 多继承(从左到右优先)passc = C()
print(c.method())  # 输出 "A"(A的优先级高于B)

3. ​多态(Polymorphism)​

核心思想

同一接口对不同对象产生不同行为。

Python 的实现

  • Python 是动态类型语言,多态通过鸭子类型​(Duck Typing)实现:
    • 不依赖继承关系,只要对象有相同方法名即可。
  • 结合继承时,子类重写父类方法实现多态。

示例代码

(1)基于继承的多态
class Animal:def speak(self):raise NotImplementedError("子类必须实现此方法")class Dog(Animal):def speak(self):return "Woof!"class Cat(Animal):def speak(self):return "Meow!"def animal_sound(animal: Animal):print(animal.speak())# 使用
animal_sound(Dog())  # 输出 "Woof!"
animal_sound(Cat())  # 输出 "Meow!"
(2)鸭子类型(无需继承)
class Car:def sound(self):return "Vroom!"class Robot:def sound(self):return "Beep!"def make_sound(obj):  # 不关心类型,只要实现sound()print(obj.sound())# 使用
make_sound(Car())    # 输出 "Vroom!"
make_sound(Robot())  # 输出 "Beep!"

总结表:Python 中的三大特征

特征Python 实现方式关键语法
封装命名约定(_var__var)+ propertyself.__balance
继承单继承/多继承 + super()class Child(Parent1, Parent2)
多态鸭子类型 + 方法重写同名方法在不同类中实现不同行为

Python 面向对象的独特之处

  1. 动态性​:属性和方法可在运行时动态添加。
  2. 鸭子类型​:多态不依赖继承,而是“只要像鸭子,就是鸭子”。
  3. 混入(Mixin)​​:通过多继承实现代码复用(如 class LoggableMixin)。

通过灵活运用这三大特征,Python 的面向对象编程既能保持简洁,又能实现高度可扩展的设计。

http://www.xdnf.cn/news/1152145.html

相关文章:

  • 【RK3576】【Android14】调试方法
  • 【理财】为什么要进行资金预留
  • QT动态加载动态库 QLibrary
  • 基于dcmtk的dicom工具 第六章 StoreSCU 图像发送
  • C语言:20250719笔记
  • docker|Linux|以centos基础镜像为基础制作nmap专用镜像(镜像瘦身计划)
  • 物联网系统中-告警配置功能的定义
  • MyBatis动态SQL全解析:五大核心标签实战指南
  • 加线机 和 胶带机
  • MyBatis之缓存机制详解
  • Go-Redis × RediSearch 全流程实践
  • #Datawhale组队学习#7月-强化学习Task2
  • 板子 5.29--7.19
  • Git仓库使用
  • Python关于numpy的基础知识
  • 若依部署项目到服务器
  • 深入排查:编译环境(JDK)与运行环境(JRE/JDK)不一致时的常见 Java 错误及解决方案
  • 【Linux】如何理解 “一切皆文件”
  • 黑马点评系列问题之p70postman报错“服务器异常”
  • LeetCode中等题--167.两数之和II-输入有序数组
  • Java File 类详解:从基础操作到实战应用,掌握文件与目录处理全貌
  • 我用Cursor,1周上线了一个虚拟资料流量主小程序技术选型
  • Node.js:EventEmitter、Buffer
  • PCB 混合介质叠层:材料特性匹配与性能提升的技术解析
  • 如何解决 ‘NoneType‘ object has no attribute ‘get‘问题
  • 【取消分仓-分布式锁】
  • OpenCV特征点提取算法orb、surf、sift对比
  • 【数据类型与变量】
  • 学习C++、QT---29(QT库中QT事件的介绍和用了几个案例来对事件怎么使用的讲解)
  • UniApp 优化实践:使用常量统一管理本地存储 Key,提升可维护性