📜  如何用 super 做两个构造函数 (1)

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

如何用 super 做两个构造函数

在 Python 中,一个类可以拥有多个构造函数。我们可以使用 super() 函数来定义不同参数的构造函数,让代码更加简洁明了。本文将介绍两种常见的使用 super() 函数定义构造函数的方式,并给出示例代码。

1. 父类构造函数需要传参数

如果父类的构造函数有参数,我们需要在子类中显式地调用父类的构造函数,并传入相应的参数。我们可以在子类的构造函数中使用 super() 函数来调用父类的构造函数,如下所示:

class Person:
    def __init__(self, name):
        self.name = name

class Student(Person):
    def __init__(self, name, major):
        super().__init__(name)
        self.major = major

在上面的代码中,Person 类有一个带有一个参数 name 的构造函数。Student 类继承自 Person,并有另一个带有两个参数 namemajor 的构造函数。我们在 Student 类的构造函数中使用 super().__init__(name) 来调用父类 Person 的构造函数,并传入参数 name。然后再定义 major 属性。

2. 父类构造函数不需要传参数

如果父类的构造函数不需要传参数,我们可以直接在子类的构造函数中使用 super() 函数来调用父类的构造函数,如下所示:

class Person:
    def __init__(self):
        self.age = 18

class Student(Person):
    def __init__(self, major):
        super().__init__()
        self.major = major

在上面的代码中,Person 类有一个不带参数的构造函数,用于初始化 age 属性。Student 类继承自 Person,并有一个带有一个参数 major 的构造函数。我们在 Student 类的构造函数中使用 super().__init__() 来调用父类 Person 的构造函数,然后再定义 major 属性。

总结

通过上面的示例代码,我们可以看到使用 super() 函数定义构造函数可以让代码更加简洁明了。如果我们需要给父类的构造函数传参数,则需要在子类构造函数中显式地调用父类的构造函数,并传入相应的参数;如果父类的构造函数不需要传参数,则可以直接在子类的构造函数中使用 super() 函数来调用父类的构造函数。