在 Python 中,__init__
和 __new__
是两个特殊的方法,它们在创建对象时被调用,但它们的作用和执行时机有所不同。
__init__
方法是 Python 中的构造函数,用于初始化对象的属性。当使用 class
关键字定义类后,每次创建类的实例时,__init__
方法都会被自动调用。它接受 self 参数,代表当前正在创建的对象实例,可以在 __init__
方法中对对象的属性进行赋值等操作。
例如,以下是一个简单的示例,展示了如何使用 __init__
方法:
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
# 创建 Student 类的实例
student1 = Student("Alice", 20)
student2 = Student("Bob", 22)
# 访问对象的属性
print(student1.name)
print(student1.age)
print(student2.name)
print(student2.age)
在上述示例中,__init__
方法接受两个参数 name
和 age
,并将它们分别赋值给对象的属性 self.name
和 self.age
。通过创建 Student
类的实例并访问其属性,可以看到对象的属性被正确初始化。
__new__
方法是 Python 中的静态方法,用于控制对象的创建过程。它是一个更底层的方法,在创建对象之前被调用。__new__
方法接受两个参数:cls
表示类本身,args
和 kwargs
是传递给类构造函数的参数。
与 __init__
方法不同,__new__
方法通常不进行属性的初始化,而是可以用来实现一些更高级的对象创建逻辑,例如自定义对象的创建过程、控制对象的内存分配等。
需要注意的是,一般情况下不需要直接重写 __new__
方法,除非有特殊的需求。常见的情况是使用 __init__
方法进行对象的初始化。
总的来说,__init__
方法用于对象的属性初始化,而 __new__
方法用于更底层的对象创建控制。在大多数情况下,使用 __init__
方法就可以满足对象初始化的需求。