继承
1.什么是继承?
继承指的是新建类的方法,新建的类称之为子类或派生类
子类继承的类叫父类,也被称作基类或超类
子类可以继承父类的属性(特征与技能),并且可以派生出自己的特征和技能
在python中,一个子类可以有多个父类,但是其他语言中一个子类只能继承一个父类
2.为什么要继承
继承的目的是为了减少重复的代码
3.如何实现继承
1.首先要确定好谁是子类,谁是父类
2.在定义类的时候,在子类后面加括号,括号里写父类名即可实现继承
class animal:
def __init__(self,footnum):
self.footnum=footnum
def roar(self):
print('awwwww!')
class dog(animal):
def __init__(self,name,age,footnum):
self.name=name
self.age=age
animal.__init__(self,footnum)
def roar(self):
print('Bark!')
class shiba_inu(dog):
def __init__(self,name,age,footnum,eyes):
dog.__init__(self,name,age,footnum)
self.eyes_colour=eyes
kono=shiba_inu('dio',3,4,'blue')
print(kono.roar())
print(kono.eyes_colour)
查询顺序
在内存查找数据时,会首先查询自己有没有,然后去查找子类有没有,再去查找父类,如果都没有就会报错
寻找继承关系
如何寻找继承关系:
想要寻找继承关系,首先要“先抽象,再继承”
那什么是抽象?
抽象指的是抽取相似的部分
-先抽象(抽象思想):
奥巴马--》马类--》动物类
麦兜--》猪类--》动物类
史努比--》狗类--》动物类
抽象定义的动物类,我们称之为父类
拥有动物都有的特征和技能
-再继承(在程序中):
奥巴马--》调用马类--》继承动物类
麦兜--》调用猪类--》继承动物类
史努比--》调用狗类--》继承动物类
继承的关系
对象是特征与技能的结合体
类是一系列对象相同的特征与技能的结合体
继承是一系列类相同的特征与技能的结合体
在继承背景下,对象属性的查找顺序:
1.对象查找属性会先从对象的名称空间中查找
2.若对象没有,则会去类里面查找
3.若当前类是子类,并且没有对象找的属性,会去父类中查找
注意:对象查找属性,若子有,不管父类有没有,以子类为准
class Foo:
def f1(self):
print('Foo.f1')
def f2(self):
print('Foo.f2')
self.f1()
class Soo(Foo):
def f1(self):
print('Soo.f1')#如果这一行被注释的话会输出第二种
soo_obj=Soo()
soo_obj.f2()
'''第一种
Foo.f2
Soo.f1
'''
'''第二种
Foo.f2
Foo.f1
'''
如果子类继承父类的__init__
毫无意义
解决方案有两种,
一种是直接通过父类.调用__init__
把__init__
当作普通函数使用,传入对象与继承的属性
还有一种是 super
钻石继承
就是从你爸那边继承钻石矿
经典类优先深度