Python中的super()示例
在本教程中,我们将了解Python中什么是super()函数以及如何使用它。
Python super()函数
super()是Python中的内置函数,它返回一个代理对象,该代理对象可用于将方法调用(包括对构造函数的调用)委派给子类的直接父类。
super()的语法
Python中super()的语法如下:
super([type[, object-or-type ]])
假设我们有一个继承自基类B的子类C,其定义如下:
class C(B): def method(self, arg): super().method(arg)
在方法中,有一个对方法的调用,该方法是使用super()函数在超类中定义的。由于两个参数都是可选的,因此此调用super()。method(arg)等效于传递了两个参数的super(C,self).method(arg)。
使用super()
1.由于super()是超类的代理对象(间接引用),因此我们可以使用super()来调用超类方法,而不是直接使用超类名称。如果我们采用以下类结构
class C(B): def method(self, arg): super().method(arg)
在这里,我们还可以使用此语句来调用父类的方法
B.method(arg)
使用super()子类并不与同一父类紧密绑定。如果我们以后想要更改C继承的类,则super()将指向新的超类。
class C(A): def method(self, arg): super().method(arg)
现在super()。method(arg)调用类A的方法。
- super()的使用还有助于减少代码冗余。请参阅示例以了解更多信息。
使用super()的Python示例
在示例中,有一个名为Person的类充当基类,另一个类Employee继承自Person类。 Employee类还添加了自己的属性,并且覆盖了父类方法。
class Person: def __init__(self, name, age): self.name = name self.age = age def display_info(self): print('In display_info method of Person class') print('Name:', self.name) print('Age:', self.age) class Employee(Person): def __init__(self, person_id, department, name, age): self.name = name self.age = age self.person_id = person_id self.department = department def display_info(self): print('In display_info method of Employee class') print('Id:', self.person_id) print('Name:', self.name) print('Age:', self.age) print('Department:', self.department)
在子类Employee中,我们可以注意到在构造函数中初始化父类的字段是多余的,尽管父类中已经有一个构造函数正在执行此操作。在display_info()方法中,我们也有print语句来打印姓名和年龄,尽管Person类中已经有一个方法在执行此操作。
在这里,我们可以使用super()调用父类的构造函数来初始化父类中存在的字段。使用super()我们还可以调用parent()类方法。这是修改后的Employee类
class Employee(Person): def __init__(self, person_id, department, name, age): super().__init__(name, age) self.person_id = person_id self.department = department def display_info(self): super().display_info() print('In display_info method of Employee class') print('Id:', self.person_id) print('Department:', self.department)
如我们所见,super()用于调用可在此处初始化的字段的父类构造函数。
super().__init__(name, age)
从覆盖的display_info()方法中,可以调用父类的方法。
super().display_info()
在创建Employee类的对象并使用该对象调用方法时
e = Employee(1, "IT", "Michael Weyman", 42) e.display_info()
输出:
In display_info method of Person class Name: Michael Weyman Age: 42 In display_info method of Employee class Id: 1 Department: IT