CSIC_716_20191126【面向对象编程--继承】
继承
什么是继承:继承是新建类的一种方式,通过此方式生成的类称为子类、或者 派生类,被继承的类称为父类、基类或超类。在python中,一个子类可以继承多个父类。
继承的作用:减少代码的冗余,提高开发效率。
如何实现继承:在定义类的基础上,在类名后加上(父类名)。 class Teacher(Human): ----------->Teacher类继承自Human类
类似于类和对象谁先有的关系,父类和子类的关系也类似。先在子类中抽象出父类,再改写子类进行继承。
在有继承关系的类中,实例化出的对象在查找相关属性时,会先在对象的名称空间中找,再到子类的名称空间中找,最后到父类的名称空间中找,若全部都找不到,就会报错。
派生
子类继承父类的属性与方法,并派生出属于自己的属性与方法。
如果子类中的方法名与父类中的重名,会优先使用子类的。相当于其他语言中的重写。
派生的两种实现方式:特别强调,在编程时,务必二选一,严禁混用
1、指名道姓式
# _*_ coding: gbk _*_
# @Author: Wonder
class Human:
def __init__(self, name, age):
self.name = name
self.age = age
class Teacher(Human):
def __init__(self, name, age, gender):
Human.__init__(self, name, age)
self.gender = gender
teacher1 = Teacher('abc', 19, 'male')
print(teacher1.name, teacher1.age, teacher1.gender) # abc 19 male
2、super ( ) 方法
# _*_ coding: gbk _*_
# @Author: Wonder
class Human:
def __init__(self, name, age):
self.name = name
self.age = age
class Student(Human):
def __init__(self, name, age, hobby):
super().__init__(name, age)
self.hobby = hobby
student1 = Student('Henry', 18, 'swimming')
print(student1.name, student1.age, student1.hobby) # Henry 18 swimming
经典类与新式类
在python2中,如果没有明确标明是object的子类,都属于经典类。
在python3中,无论有没有标明是object的子类,全部都是新式类,可以理解为全部继承自object类。
在多继承的情况下,会将查找顺序写入mro列表中,
经典类的查找顺序:深度优先,一开始就刨根问底,此处的底一定不可以是object的子类。
新式类的查找顺序:广度优先,全部遍历完之后,最后触底object,python3中底可以不做任何申明,但python2中一定要声明object才可以当成新式类处理。
新式类提供了方法 .mro方法查看查找序列。super()方法是严格按照mro序列进行查找的,特别注意,有个广度优先原则在里面。

浙公网安备 33010602011771号