简述面向对象中__new__和__init__区别
时间: 2023-11-22 10:48:41 浏览: 93
在面向对象编程中,__new__和__init__都是用于创建类实例的方法,但它们的作用不同。
__new__方法是用于创建实例并返回它的实例对象的方法。它是类级别的方法,即它是在类级别上定义的,而不是在实例级别上定义的。__new__方法的第一个参数是类本身,其余参数是传递给类构造函数的参数。__new__方法的返回值通常是一个新的实例对象,但也可以返回一个已经存在的实例对象。
__init__方法是用于初始化实例的方法。它是实例级别的方法,即它是在实例级别上定义的。__init__方法的第一个参数是self,它指向正在初始化的实例对象。其余参数是传递给类构造函数的参数。__init__方法通常不返回任何值,它只是初始化实例的状态。
因此,__new__方法是用于创建实例对象的,而__init__方法是用于初始化实例对象的。__new__方法返回一个新的实例对象,而__init__方法对该实例对象进行初始化。
下面是一个简单的例子,演示了__new__和__init__方法的区别:
```python
class MyClass:
def __new__(cls, *args, **kwargs):
print("__new__ method is called")
instance = super().__new__(cls)
return instance
def __init__(self, *args, **kwargs):
print("__init__ method is called")
self.name = args[0]
self.age = args[1]
my_obj = MyClass("Tom", 25)
print(my_obj.name)
print(my_obj.age)
```
输出结果为:
```
__new__ method is called
__init__ method is called
Tom
25
```
在这个例子中,__new__方法被调用来创建实例对象,然后__init__方法被调用来初始化该实例对象的状态。
阅读全文