欢迎访问宙启技术站
智能推送

Python中new()和init()方法的执行顺序

发布时间:2023-12-25 08:33:05

在 Python 中,__new__()__init__() 是用来创建对象的特殊方法。__new__() 方法在对象创建之前调用,通过该方法创建对象并返回一个实例。__init__() 方法在对象创建之后调用,用于初始化该实例的属性。

首先,让我们看一个简单的例子来说明 __new__()__init__() 方法的执行顺序:

class MyClass:
    def __new__(cls):
        print("__new__() called")
        return super().__new__(cls)

    def __init__(self):
        print("__init__() called")

obj = MyClass()

输出结果为:

__new__() called
__init__() called

从输出结果可以看出,__new__() 方法在 __init__() 方法之前被调用。

在这个例子中,__new__() 方法创建了一个新的对象,并返回该对象的实例。在此之后,__init__() 方法被调用以初始化该实例。

接下来,让我们看一个更复杂的例子,使用参数来演示 __new__()__init__() 方法的执行顺序。在这个例子中,我们将传递一个参数来初始化属性:

class Person:
    def __new__(cls, name):
        print("__new__() called")
        return super().__new__(cls)
    
    def __init__(self, name):
        self.name = name
        print("__init__() called")

person = Person("Alice")

输出结果为:

__new__() called
__init__() called

同样地,__new__() 方法在 __init__() 方法之前被调用。

在这个例子中,__new__() 方法接收一个参数 name 并使用 super().__new__(cls) 创建一个新的对象。接着,__init__() 方法接收同样的参数 name 并将其赋值为实例的属性。

总结一下,__new__() 方法在创建对象之前被调用,用于创建对象并返回实例。__init__() 方法在创建对象之后被调用,用于初始化属性。