Python中的super()示例

时间:2020-01-09 10:44:20  来源:igfitidea点击:

在本教程中,我们将了解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的方法。

  1. 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