Python学习笔记:__new__与__init__及类复制详解
需积分: 5 177 浏览量
更新于2024-08-04
收藏 10KB MD 举报
在本篇Python笔记中,我们主要探讨了Python中创建对象的两个关键方法:`__new__` 和 `__init__`,以及它们在实例化过程中起到的作用。`__new__` 函数在创建新对象时被调用,负责初始化对象的类型(即类)并返回一个新对象,而`__init__` 方法则在对象创建后被调用,主要用于设置对象的初始状态。
首先,`__new__` 方法演示了创建对象的过程。当我们定义一个类如`Person`时,`__new__` 函数在实例化时被自动调用。在这个例子中,`cls` 参数代表类本身,`*args` 和 `**kwargs` 分别表示可变数量的位置参数和关键字参数。`super().__new__(cls)` 是调用父类的`__new__`,以便继承父类的行为。`return obj` 表示创建并返回新对象。
接下来,`__init__` 方法用于初始化对象属性,如`name`和`age`,并将这些属性绑定到新创建的对象上。当创建`Person` 类的实例`p1`时,`__init__` 被调用,并设置了其属性值。
关于类的赋值和拷贝,这里提到了浅拷贝和深拷贝的概念。在Python中,简单的变量赋值操作并不会复制对象本身,而是创建一个新的引用,也就是说,源对象和目标对象实际上是共享内存地址的。这种行为在浅拷贝中体现,例如使用`copy`模块中的`copy()`函数或序列类型(如列表、元组)的切片操作。
然而,如果对象内部包含复杂的数据结构(如嵌套的对象),浅拷贝可能不足以满足需求,因为这些子对象不会被复制。此时,需要使用`copy`模块的`deepcopy()`函数来实现深度拷贝,它会递归地复制对象及其所有子对象,确保源对象和拷贝对象之间完全独立,包括它们所包含的所有数据。
在给出的代码中,`Cpu`、`Disk` 和 `Computer` 类作为示例展示了可能的继承结构,而在创建`Computer` 对象时,如果只做浅拷贝,`cpu` 和 `disk` 属性将会指向相同的实例。要实现深度拷贝,需要在`Computer` 类中显式调用`deepcopy` 函数来复制子对象。
总结来说,本笔记深入剖析了Python中对象创建的关键环节,以及如何处理不同类型的对象复制,这对于理解面向对象编程的实质和优化内存管理具有重要意义。
2024-02-01 上传
2022-05-31 上传
2022-04-22 上传
2023-09-16 上传
2023-05-27 上传
2023-05-24 上传
2023-09-04 上传
2023-05-23 上传
2023-03-25 上传
曹宫子沫
- 粉丝: 25
- 资源: 4
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍