CSIC_716_20191125【面向对象编程--继承】

继承

什么是继承:继承是新建类的一种方式,通过此方式生成的类称为子类,被继承的类称为父类、基类或超类。在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。

新式类提供了方法   .mro方法查看查找序列。super()方法是严格按照mro序列进行查找的,特别注意,有个广度优先原则在里面。

猜你喜欢

转载自www.cnblogs.com/csic716/p/11935910.html