Python继承
在本教程中,我们将学习OOPS概念继承以及如何在Python中使用继承。
继承概念
继承使我们可以创建一个类,该类获取另一个类的所有属性和方法。
其成员被继承的类称为Super类。也称为父类或者基类。
从另一个类继承的类称为Sub类。也称为子类或者派生类。
Python继承语法
如果有一个名为ParentClass的类定义为
class ParentClass: body of parent class
然后可以将从此ParentClass继承的ChildClass定义为
class ChildClass(ParentClass): body of child class
继承Python示例
在示例中,有一个名为Person的类充当基类,另一个类Employee继承自Person类。
class Person: def __init__(self, name, age): self.name = name self.age = age def display_person(self): print('In display_person method') print('Name:', self.name) print('Age:', self.age) class Employee(Person): pass e = Employee("Michael Weyman", 42) e.display_person()
输出:
In display_person method Name: Michael Weyman Age: 42
如我们所见,在Employee类中,只是pass关键字用于指定它不会向类添加任何属性或者方法。它仅继承其继承的类的所有属性和方法。
我们可以创建Employee类的对象并初始化'name'和'age'属性,因为Employee类继承了Person类的这些属性。同样,我们也可以使用Employee类的对象调用方法display_person()方法。
构造函数的重载和对继承的使用
当一个类在Python中继承另一个类时,默认情况下,子类也可以使用超类的构造函数。如果子类中有额外的字段需要在子类中进行初始化,则可以覆盖子类中的构造函数以在那里初始化字段。
在大多数情况下,我们都将从基类继承,并在子类中添加其自身的属性和方法。要初始化子类的属性,我们也可以在子类中添加__init __()函数。在我们的Employee类中,我们添加两个字段person_id和department,并添加一个方法display_employee()。
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_employee(self): print('In display_employee method') print('Id:', self.person_id) print('Name:', self.name) print('Age:', self.age) print('Department:', self.department)
在上面的类中,我们可以注意到在构造函数中初始化父类字段是多余的,尽管在父类中已经有一个构造函数正在执行此操作。在display_employee()方法中,我们也有打印语句来打印姓名和年龄,尽管在Person类中已经有一个方法可以这样做。
如果要从子类中调用超类构造函数和方法,可以使用super()函数来完成,这有助于避免上述Employee类中存在的代码冗余。这是使用super()函数的经过修改的Employee类。
class Employee(Person): def __init__(self, person_id, department, name, age): # call constructor of super class super().__init__(name, age) self.person_id = person_id self.department = department def display_employee(self): # call method of super class super().display_person() print('In display_employee method') print('Id:', self.person_id) print('Department:', self.department) e = Employee(1, "IT", "Michael Weyman", 42) e.display_employee()
输出:
In display_person method Name: Michael Weyman Age: 42 In display_employee method Id: 1 Department: IT
继承的优点
- 继承有助于编写可重用的代码,我们可以在其中仅通过从现有类继承而使用现有功能。
- 继承有助于编写层次结构代码,其中我们可以在超类中编写更通用的代码,然后继续继承它并添加更多特定的方法。例如,我们可以拥有一个Vehicle超类,它具有更通用的功能,例如Accelerate(),brake(),gear()。然后继承它以创建更专业的类,如Car,Bus,MotorCycle,然后继承自Car来创建更特定的类,如SUV,SportsCar。
- 此外,由于我们不将所有功能都放在同一个类中,而是创建多个类来创建具有在这些类之间分布的代码的分层结构,因此使代码管理变得容易。