在 Python 中调用父类的超级构造函数
Vaibhav Vaibhav
2022年5月17日
继承是计算机科学中面向对象编程的一个强大概念,它可以帮助我们避免编写冗余代码,并且与编程的黄金 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
类的构造函数。注意需要调用父类的构造函数;否则,代码将中断。
Author: Vaibhav Vaibhav