在Python中,`__init__`和`__new__`都是类的构造方法,但它们的功能和用途有所不同。
`__init__`方法是在对象实例化后,用于初始化对象的属性和状态的。它在对象创建后立即被调用,并且通常在子类中被重写以执行更具体的初始化操作。`__init__`方法接收两个隐式参数:`self`和`args`。`self`是对实例本身的引用,而`args`是传递给类构造函数的参数元组。
例如:
```python
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Alice", 30)
```
`__new__`方法则是在对象实例化之前被调用的。它负责创建并返回对象实例。`__new__`方法接收一个隐式参数`cls`,即类对象本身。如果需要自定义对象创建过程,可以在`__new__`方法中实现。
例如:
```python
class Person:
def __new__(cls, name, age):
if age < 18:
raise ValueError("Age must be greater than or equal to 18")
return super().__new__(cls)
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Alice", 15) # 抛出ValueError异常
```
总结:`__init__`用于初始化对象的属性和状态,而`__new__`用于创建对象实例。在实际应用中,可以根据需要在这两个方法中实现不同的功能。... 展开详请