### Python中面向对象你应该知道的一些知识 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,Python作为一种支持多种编程风格的语言,自然也支持面向对象编程。本文将详细介绍Python中面向对象编程的一些核心概念,并通过具体的示例帮助读者更好地理解和应用这些概念。 #### 0x00 is 与 == `is` 和 `==` 运算符在Python中用于比较对象。`==` 用于比较两个对象的内容是否相等,而 `is` 用于判断两个对象是否为同一对象(即它们是否位于同一内存位置)。具体区别如下: - **==**:比较两个对象的值是否相等。默认情况下,它调用对象的 `__eq__` 方法来进行比较。 - **is**:比较两个对象是否为同一个对象,即它们的内存地址是否相同。 **示例**: ```python a = [1, 2, 3] b = [1, 2, 3] print(a == b) # 输出 True,因为 a 和 b 的内容相同 print(a is b) # 输出 False,因为 a 和 b 是不同的对象 ``` 对于某些常用值(如小范围内的整数或短字符串),Python会进行缓存,这意味着在[-5, 256]区间内的整数以及较短的字符串,在创建时会被重用,从而减少内存消耗。 **示例**: ```python a = -5 b = -5 print(a == b) # 输出 True print(a is b) # 输出 True,因为 -5 被缓存 ``` #### 0x01 __repr__ 与 __str__ 在Python中,`__repr__` 和 `__str__` 方法用于定义对象的字符串表示形式,但它们的应用场景有所不同。 - **__repr__**:通常返回一个包含对象信息的字符串,以便开发人员能够快速了解对象的状态。这种表示方式更偏向于开发者查看,有时可以直接用来重新创建一个对象。 - **__str__**:主要用于用户友好地显示对象的信息,通常被用作字符串格式化输出、打印等。 **示例**: ```python import datetime today = datetime.date.today() print(str(today)) # 输出 '2019-07-07' print(repr(today)) # 输出 "datetime.date(2019, 7, 7)" ``` 在实际开发中,推荐为自定义类定义这两个方法,以提高代码的可读性和调试效率。 #### 0x02 对象复制 对象复制分为浅拷贝和深拷贝两种方式,它们的主要区别在于是否递归复制对象内部的子对象。 - **浅拷贝**:仅复制对象本身,不复制对象内部的子对象,因此当子对象发生变化时,原始对象也会受到影响。 - **深拷贝**:不仅复制对象本身,还会递归复制对象内部的所有子对象,使得复制后的对象与原始对象完全独立。 **示例**: ```python import copy a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 浅拷贝 b = list(a) a[1][2] = 'x' print(a) # 输出 [[1, 2, 3], [4, 5, 'x'], [7, 8, 9]] print(b) # 输出 [[1, 2, 3], [4, 5, 'x'], [7, 8, 9]] # 深拷贝 c = copy.deepcopy(a) a[1][2] = 'y' print(a) # 输出 [[1, 2, 3], [4, 5, 'y'], [7, 8, 9]] print(c) # 输出 [[1, 2, 3], [4, 5, 'x'], [7, 8, 9]] ``` ### 结论 面向对象编程是Python中非常重要的一部分,掌握其基础知识对于开发高质量、可维护的软件至关重要。通过了解 `is` 和 `==` 的区别、`__repr__` 和 `__str__` 的使用场景以及对象的浅拷贝和深拷贝等概念,可以更加灵活地运用面向对象编程技术解决实际问题。
- 粉丝: 0
- 资源: 955
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 中小学数字化平台解决方案.docx
- 弱电人需要的网络基础知识汇总.docx
- 智慧龙湖天街数字化解决方案.pptx
- 温室大棚、集约养殖、水肥一体、高效节水等设施农业建设方案.docx
- 物流实训室元宇宙解决方案.docx
- 温室大棚、集约养殖、水肥一体、高效节水等设施农业建设方案.pptx
- 农村客货邮融合发展建设方案.docx
- 乡村富民特色产业农业品牌建设方案.pptx
- 农业农村基础设施建设方案.pptx
- 工地数字孪生可视化平台解决方案.pptx
- 基于线性代数与机器学习的实验任务解析-含代码及解答
- 人物检测37-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- ANSYS WORKBENCH轴承动力学仿真,ANSYS做内圈、外圈和滚子故障的模拟图片为凯斯西储大学SKF轴承内外圈故障的结果,振动加速度包络后故障特征频率可以与实验相差仅为5%
- 戴尔笔记本Dell 5400 EDC41 - 维修图纸
- matlab实现遗传算法求解迪卡侬生产调度优化问题(含甘特图)-遗传算法-生产调度-Matlab-迪卡侬生产调度优化
- 时变动态分位数CoVaR、delta-CoVaR,分位数回归 △CoVaR测度 溢出效应 动态 Adrian2016基于分位数回归方法计算动态条件在险价值 R语言代码,代码更数据就能用,需要修改的