Python 为什么在new()之后总是调用init()函数
在本文中,我们将介绍为什么在Python中,在实例化一个对象时,init()函数总是在new()函数之后被调用的原因。我们将解释new()和init()之间的区别,并提供示例来说明为什么它们需要按照特定的顺序被调用。
阅读更多:Python 教程
new()和init()的区别
在Python中,当我们使用类创建一个对象时,通常会使用构造函数进行初始化。构造函数在每次实例化一个对象时都被调用。但是,new()和init()是构造函数的两个不同的部分。
new()在init()被调用之前被自动调用,负责创建一个实例。它是一个静态方法,可以返回一个实例。new()通常用于继承不可变的类型,如元组和字符串。在自定义类中,我们可以决定是否要重写new()方法。
init()在new()被调用之后被自动调用。它是一个初始化方法,用于设置对象的初始状态。init()不能返回任何值,它只负责修改实例的属性。通常情况下,我们需要重写init()方法来初始化实例化对象。
为什么new()在init()之前被调用?
在讨论为什么new()总是在init()之前被调用之前,我们首先要理解它们各自的职责。
- new()方法是负责创建一个实例,它是实例化一个对象的第一步。实例创建完毕后,new()将返回一个实例。
-
init()方法是负责设置对象的初始状态,在实例创建之后进行调用。它接收new()返回的实例作为参数,并设置对象的属性。
考虑以下示例:
输出结果将是:
从输出结果中我们可以看出,new()方法在init()方法之前被调用。这是因为在实例化一个对象时,Python首先调用new()方法来创建一个实例,然后将该实例作为参数传递给init()方法。
new()和init()的示例
为了更好地理解new()和init()的调用顺序,让我们来看一个示例。
输出结果将是:
从输出结果中我们可以看出,new()方法在init()方法之前被调用。new()方法创建一个实例,并将该实例传递给init()方法。在init()方法中,我们设置了实例的name属性为”Alice”。
总结
在Python中,new()方法和init()方法在实例化一个对象时扮演着不同的角色。
- new()方法是负责创建一个实例,它是实例化一个对象的第一步,返回一个实例。
- init()方法是负责设置对象的初始状态,它在实例创建之后的第二步进行调用。
因此,在Python中,new()总是在init()之前被调用。new()方法创建实例,然后将实例传递给init()方法来进行初始化。这种顺序的设计使得我们能够在init()方法中正确地设置对象的初始状态。