继承

继承

一:什么是继承

  • 继承是一种新建类的方法
  • 继承的特性是:子类会遗传父类的属性
  • 继承是类与类之间的关系

二:为什么用继承

使用继承可以减少代码的冗余

三:对象的继承

  • 查看继承的父类: __bases__是类的属性,用来查找当前类的父类.
  • python中支持一个类同时继承多个父类

四:寻找继承关系

(1):如何寻找继承关系

要想寻找继承关系,首先要“先抽象,在继承”。

(2):什么是抽象

抽象指的是抽取相似的部分,称之为抽象

(3):继承的关系

对象:对象是特征与技能的结合体

类:类是一系列对象的特征与技能的结合体

继承:继承是一系列类相同的特征技能的结合体

五:继承背景下,对属性的查找顺序

  1. 对象查找属性会先从对象的名称空间查找
  2. 如果对象没有,则回去类里面找
  3. 落当前类是子类,且没有对象找的属性,会去父类中查找,若还是没有会去object中,若还是没有则报错

注意,对象查找属性,若子类有,不管父类有没有,以子类为准

__dict__:查看对象与类的名称空间

__class__:对象的属性:查看当前对象的类

__bases__:是类的属性,用来查找当前类的父类.

派生

一:什么时派生

  1. 派生指的时子类继承父类的属性,并且派生出新的属性。

  2. 子类派生出的新属性,若与父类的属性相同,则以子类的为准。

  3. 继承时谁与谁的关系,指的时类与类的关系,子类与父类的从属关系。

二:派生的使用方法

(1)类调用

指名道姓访问某个类的函数,该方式与继承无关

class OldboySchool:
    school='oldboy'
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

class OldStudent(OldboySchool):
    def __init__(self, name, age, sex,course):
        OldboySchool.__init__(self,name,age,sex)
        self.name = name
        self.age = age
        self.sex = sex
        self.course=course

    def choose_course(self):
        print(f'学生{self.name}选择课程{self.course}')

        
# 直接通过父类.(调用)__init__,把__init__当作普通的函数使用,传入对象继承的属性

(2)super

class OldboySchool:
    school='oldboy'
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
        
class OldTeacher(OldboySchool):
    def __init__(self,name,age,sex,level):
        super().__init__(name,age,sex)
        self.level=level
        
        
# super是一个特殊的类,在子类中调用super()会得到一个特殊的对象,通过“.”指向的时父类的名称空间

注意

这两种方法不要混用

新式类与经典类

在python2中,才会有新式类与经典类之分。

在python3中,所有类都是新式类

一:新式类

继承object的类都称之为新式类

python3中,子类不继承自定义的类,默认继承object。

二:经典类

在python2中,凡是没有继承object的类都是经典类

钻石继承

钻石继承也可以称之为菱形继承

在多继承的情况下形成的钻石继承(继承顺序)

经典类

深度优先

新式类

广度优先

posted @ 2019-10-10 22:11  鸿鸿1  阅读(256)  评论(0编辑  收藏  举报