在Python中,__init__
和 __new__
是两个特殊的方法,用于创建和初始化对象。它们有不同的作用和调用时机。
__new__
方法:__new__
是一个用于创建对象的静态方法(类方法),它在对象实例化之前调用。- 这个方法的主要作用是创建并返回一个新的实例对象。它接收的参数与普通的实例方法不同,第一个参数是类本身(通常命名为
cls
),其余参数是用于创建对象的初始化参数。 __new__
的返回值通常是一个新的实例对象,但在某些情况下,可以返回一个已存在的对象,甚至可以返回一个完全不同类型的对象。
以下是一个简单的示例:
class MyClass: def __new__(cls, *args, **kwargs): instance = super(MyClass, cls).__new__(cls) # 在这里可以进行对象的创建和初始化 return instance obj = MyClass()
__init__
方法:__init__
是一个用于初始化对象的实例方法,它在对象已经被创建后调用。- 这个方法不创建对象,而是对已经存在的对象进行初始化。通常,它用于设置对象的属性和执行其他与对象初始化相关的操作。
__init__
不需要显式地返回值,它的返回值被忽略。
示例:
class MyClass: def __init__(self, *args, **kwargs): # 在这里可以进行对象的初始化操作 pass obj = MyClass()
总体而言,__new__
主要用于创建对象,而 __init__
主要用于对象的初始化。在大多数情况下,你只需要实现 __init__
方法来执行对象的初始化工作。如果你需要控制对象的创建过程,或者希望返回一个不同类型的对象,那么可以实现 __new__
方法。在实际的编程中,使用 __init__
的频率更高,而 __new__
用得相对较少。