继承
目录
继承
一:什么是继承
- 继承是一种新建类的方法
- 继承的特性是:子类会遗传父类的属性
- 继承是类与类之间的关系
二:为什么用继承
使用继承可以减少代码的冗余
三:对象的继承
- 查看继承的父类: __bases__是类的属性,用来查找当前类的父类.
- python中支持一个类同时继承多个父类
四:寻找继承关系
(1):如何寻找继承关系
要想寻找继承关系,首先要“先抽象,在继承”。
(2):什么是抽象
抽象指的是抽取相似的部分,称之为抽象
(3):继承的关系
对象:对象是特征与技能的结合体
类:类是一系列对象的特征与技能的结合体
继承:继承是一系列类相同的特征技能的结合体
五:继承背景下,对属性的查找顺序
- 对象查找属性会先从对象的名称空间查找
- 如果对象没有,则回去类里面找
- 落当前类是子类,且没有对象找的属性,会去父类中查找,若还是没有会去object中,若还是没有则报错
注意,对象查找属性,若子类有,不管父类有没有,以子类为准
__dict__:查看对象与类的名称空间
__class__:对象的属性:查看当前对象的类
__bases__:是类的属性,用来查找当前类的父类.
派生
一:什么时派生
-
派生指的时子类继承父类的属性,并且派生出新的属性。
-
子类派生出的新属性,若与父类的属性相同,则以子类的为准。
-
继承时谁与谁的关系,指的时类与类的关系,子类与父类的从属关系。
二:派生的使用方法
(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的类都是经典类
钻石继承
钻石继承也可以称之为菱形继承
在多继承的情况下形成的钻石继承(继承顺序)
经典类
深度优先
新式类
广度优先