13. 继承
面向对象的编程语言支持在已有类的基础上创建新类,从而减少重复代码的编写。提供继承信息的类叫做父类(超类、基类),得到继承信息的类叫做子类(派生类、衍生类)。
例如,学生和老师都有姓名、年龄,都会吃饭、睡觉——这些是作为"人"的公共属性和行为。所以我们应该先定义人类,再通过继承,从人类派生出老师类和学生类。
python
class Person:
"""人"""
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print(f'{self.name}正在吃饭.')
def sleep(self):
print(f'{self.name}正在睡觉.')
class Student(Person):
"""学生"""
def __init__(self, name, age):
super().__init__(name, age)
def study(self, course_name):
print(f'{self.name}正在学习{course_name}.')
class Teacher(Person):
"""老师"""
def __init__(self, name, age, title):
super().__init__(name, age)
self.title = title
def teach(self, course_name):
print(f'{self.name}{self.title}正在讲授{course_name}.')
stu1 = Student('白元芳', 21)
stu2 = Student('狄仁杰', 22)
tea1 = Teacher('武则天', 35, '副教授')
stu1.eat()
stu2.sleep()
tea1.eat()
stu1.study('Python程序设计')
tea1.teach('Python程序设计')
stu2.study('数据科学导论')
▶ 运行结果:
输出
白元芳正在吃饭.
狄仁杰正在睡觉.
武则天正在吃饭.
白元芳正在学习Python程序设计.
武则天副教授正在讲授Python程序设计.
狄仁杰正在学习数据科学导论.
继承的语法是在定义类的时候,在类名后的圆括号中指定当前类的父类。如果定义一个类的时候没有指定它的父类是谁,那么默认的父类是 object 类。object 类是 Python 中的顶级类,所有的类都是它的子类。
在子类的初始化方法中,我们通过 super().__init__() 来调用父类初始化方法,super 函数是 Python 内置函数中专门为获取当前对象的父类对象而设计的。子类除了可以通过继承得到父类提供的属性和方法外,还可以定义自己特有的属性和方法,所以子类比父类拥有的更多的能力。