在 Python 中调用父类的超级构造函数

Vaibhav Vaibhav 2022年5月17日
在 Python 中调用父类的超级构造函数

继承是计算机科学中面向对象编程的一个强大概念,它可以帮助我们避免编写冗余代码,并且与编程的黄金 DRY 规则(不要重复自己)相得益彰。使用继承,一个类可以继承另一个类的所有属性和功能。继承功能的类是父类,继承功能的类是子类。

继承帮助程序员和开发人员编写可扩展、可重用和可维护的代码,从而提高生产力和效率。

要继承所有的属性和方法,我们必须从子类执行父类的构造函数。在本文中,我们将学习如何在 Python 中调用父类的超级构造函数。

在 Python 中调用父类的超级构造函数

在子类的构造函数中调用父类的构造函数或超构造函数。相同的语法如下。

super().__init__(*args, **kwargs)

父类所需的所有参数都在 __init__() 方法中传递。在上述语法中,*args, **kwargs 涵盖了所有参数,但也可以单独提及所有参数,如下所示。

super().__init__(argument1, argument2, argument3, ...)

现在我们已经完成了理论,让我们实际理解这个概念。请参阅以下 Python 代码以了解继承的概念以及如何调用超级构造函数。

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

    def get_name(self):
        return self.name

    def set_name(self, name):
        if isinstance(name, str):
            self.name = name

    def get_age(self):
        return self.age

    def set_age(self, age):
        if isinstance(age, int):
            self.age = age

    def get_gender(self):
        return self.gender

    def set_gender(self, gender):
        if isinstance(gender, str):
            self.gender = gender


class Student(Person):
    def __init__(self, name, age, gender, roll_number):
        super().__init__(name, age, gender)  # Important
        self.roll_number = roll_number

    def get_roll_number(self):
        return self.roll_number

    def set_roll_number(self, roll_number):
        if isinstance(roll_number, int):
            self.roll_number = roll_number


adam = Student("Adam", 21, "M", 5)
emma = Student("Emma", 23, "F", 18)
print("Name:", adam.get_name())
print("Age:", adam.get_age())
print("Gender:", adam.get_gender())
print("Roll Number:", adam.get_roll_number())
print()
print("Name:", emma.get_name())
print("Age:", emma.get_age())
print("Gender:", emma.get_gender())
print("Roll Number:", emma.get_roll_number())

输出:

Name: Adam
Age: 21
Gender: M
Roll Number: 5

Name: Emma
Age: 23
Gender: F
Roll Number: 18

Person 类是父类,Student 类是子类。父类和子类的所有属性都有 setter 和 getter。子类继承父类的所有属性和方法。这条语句 super().__init__(name, age, gender) 调用了 Person 类的构造函数。注意需要调用父类的构造函数;否则,代码将中断。

作者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

相关文章 - Python Class