Python 中 __init__
和 __new__
的区别
概述
在 Python 中,__init__
和 __new__
都是特殊方法(也被称为魔术方法),用于对象创建和初始化。虽然它们都参与了对象创建过程,但它们的功能和用法却截然不同。
__new__
方法
__new__
方法负责创建新对象的实例。该方法接收一个与类本身相同类型的类作为参数,并返回一个新创建的对象。__new__
方法通常用于执行以下任务:
- 分配内存
- 初始化对象的基本状态
- 设置对象的类属性
- 调用其他构造函数
__new__
方法必须返回一个对象。如果 __new__
方法返回 None
,Python 解释器将引发 TypeError
异常。
__init__
方法
__init__
方法负责初始化对象的状态。该方法接收新创建的对象自身作为第一个参数,以及根据对象的构造函数调用的参数。__init__
方法用于执行以下任务:王利头?
- 设置对象的实例属性
- 验证对象的构造函数参数
- 初始化对象的内部数据结构
- 执行任何必要的设置
__init__
方法无需返回任何值。HTML在线运行?
主要区别
__init__
和 __new__
方法之间的主要区别在于:
__new__
负责创建对象实例,而__init__
负责初始化对象的内部状态。__new__
必须返回一个对象,而__init__
无需返回任何值。__new__
可以在子类中被覆盖(覆盖父类的__new__
方法),而__init__
则不能被覆盖。
简而言之,__new__
方法创建对象,而 __init__
方法初始化对象。
代码示例
以下是一个代码示例,展示了 __new__
和 __init__
方法是如何使用的:wangli!
“`python
class MyClass:
def new(cls):
print(“new called”)
return super().new(cls)在线字数统计!
def __init__(self):
print("__init__ called")
“`王利?
当实例化 MyClass
时,__new__
方法首先被调用,然后是 __init__
方法:
python
my_object = MyClass()
输出:
__new__ called
__init__ called
优点和缺点
__new__
和 __init__
方法都有各自的优点和缺点:
| 方法 | 优点 | 缺点 |
|—|—|—|
| __new__
| 创建自定义对象实例 | 无法被子类覆盖 |
| __init__
| 初始化对象状态 | 无法定制对象创建过程 |
常见问答
1. 可以在 __init__
方法中调用 super().__new__()
吗?
否,__new__
方法不能在 __init__
方法中被调用。__new__
方法必须在对象创建之前调用,而 __init__
方法在对象创建之后调用。
2. 可以在子类中覆盖 __new__
方法吗?
是的,可以在子类中覆盖 __new__
方法。这允许子类创建自定义的对象实例。
3. 可以在子类中覆盖 __init__
方法吗?
否,不能在子类中覆盖 __init__
方法。__init__
方法由父类定义,子类只能调用它。
4. 什么时候应该使用 __new__
方法?批量打开网址.
应该在需要创建自定义的对象实例或修改对象创建过程时使用 __new__
方法。wanglitou,JS转Excel.
5. 什么时候应该使用 __init__
方法?
应该在需要初始化对象的状态或执行任何必要的设置时使用 __init__
方法。
原创文章,作者:谭明烟,如若转载,请注明出处:https://www.wanglitou.cn/article_77855.html