📜  python 为什么调用 super(class).__init__() - Python (1)

📅  最后修改于: 2023-12-03 15:19:06.794000             🧑  作者: Mango

Python中调用super(class).init()

在Python中,我们通常使用super(class).__init__()来调用父类的构造函数。此方式可以确保在继承中更好地管理调用顺序,以及避免重复初始化。在本文中,我们将解释为什么要使用这种方式以及它的作用。

为什么要使用super(class).init()?

在Python中,一个类可以继承另一个类的属性和方法。在子类中,我们通常希望调用父类的构造函数,以确保在实例化子类对象时,父类的构造函数也能被执行。这可以确保子类对象在实例化之后有正确的初始化。

下面是一个带有构造函数的示例父类:

class Parent:
    def __init__(self, name, age):
        self.name = name
        self.age = age

下面是该类的示例子类:

class Child(Parent):
    def __init__(self, name, age, gender):
        Parent.__init__(self, name, age)
        self.gender = gender

在上面的示例中,我们在子类的构造函数中调用了父类的构造函数,以便子类继承了父类的nameage属性。但是,这种方式存在缺点:如果我们将类层次结构更改为多重继承,则不能确保它们按预期顺序执行。

super()函数的作用

super()函数是Python中用于调用父类函数的内置函数。它让我们可以调用当前类的父类的方法,而无需引用父类的名称。也就是说,它解决了我们在子类的构造函数中使用父类名称调用构造函数的问题。

在使用super()函数时,我们只需要指定当前类和self作为其参数。super()将确定当前类的父类,并调用其构造函数。这使得我们可以避免直接使用父类名称,从而减少了在类层次结构中进行更改所需进行的修改次数。

下面是使用super()函数的更改后的示例子类:

class Child(Parent):
    def __init__(self, name, age, gender):
        super().__init__(name, age)
        self.gender = gender

在上面的示例中,我们使用super().__init__()调用Parent的构造函数,而不是直接调用Parent.__init__()

这使得我们的代码更加灵活,更易于维护,因为如果我们将父类更改为另一个类时,不需要手动更改构造函数中的名称。

结论

在Python中,我们通常使用super(class).__init__()来调用父类的构造函数。这种方式能够确保在继承中更好地管理调用顺序,以及避免重复初始化。同时,也能使代码更加灵活,更易于维护,因为如果我们将父类更改为另一个类时,不需要手动更改构造函数中的名称。