day_20_类的三大特征
1、继承
1.1 什么是继承
- 继承指的是新建类的方法,新建的类称之为子类或者派生类
子类继承的类叫做父类,也称之为基类或超类
- 继承的特征:
子类可以继承父类的属性(特征和技能),并且可以派生出自己的属性(特征与技能)
注意:在pyhton中,一个子类可以继承多个父类,其他语言只能一个子类继承一个父类
1.2 为什么要继承
继承的目的是为了减少代码冗余,实现代码复用
1.3 如何实现继承
-
首先要确定好谁是子类,谁是父类
-
在定义类时,子类名 + (),()内写父类名,实现继承
class A: x = 10 pass class B(A): pass print(B.x) ''' 10'''
1.4 继承父类后,对象属性调用的查找顺序
先后顺序如下:
1、对象自身名称空间
2、类名称空间
3、父类名称空间
4、若继承多个父类,则按照从左到右的顺序查找父类名称空间
1.5 派生
子类继承父类的属性,并且派生出新的属性
子类派生出新的属性,若与父类属性相同,则以子类为准
1.51 子类派生时,对父类属性的复用
-
类名.属性方式()
class OldboyPeople: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex class OldboyTeacher(OldboyPeople): def __init__(self,name,age,sex,leval,salary): # 通过类调用类自身函数的方法,直接调用父类属性 OldboyPeople.__init__(self,name,age,sex) # 派生的新属性 self.leval = leval self.salary = salary
-
super()方法
class OldboyPeople: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex class OldboyTeacher(OldboyPeople): def __init__(self,name,age,sex,leval,salary): # 通过super()方法获取父类,再调用父类的属性 super().__init__(name,age,sex) # 按照类的继承顺序,去下一个顺位的名称空间中查找__init__ # 派生的新属性 self.leval = leval self.salary = salary
1.6 钻石继承
在多继承的情况下形成的钻石继承(继承顺序,或对象属性的查找顺序)
-
经典类(只在python2中出现,没有继承object类的类)
按深度优先查找,即:
1、从左至右查找父类
2、每一个父类的的第一个子类查找完就查找这个父类,一直到最顶层的父类
3、当父类查找完了,再查找该父类剩余的子类
-
新类(继承了object类的类,python3只有新类)
按广度优先查找:
1、从左至由查找父类
2、每一个父类的子类查找完了之后,才会查找这个父类,不管这个父类处于哪一个层级
验证:
继承图解:
第一层:F H
第二层:E(F,H) G(H)
第三层:B(E) C(E) D(G)
第四层:A(B,C,D)
代码验证:
class F:
def test(self):
print('from F')
pass
class H:
def test(self):
print('from H')
pass
class G(H):
def test(self):
print('from G')
pass
class E(F,H):
def test(self):
print('from E')
pass
class B(E):
def test(self):
print('from B')
pass
class C(E):
def test(self):
print('from C')
pass
class D(G):
def test(self):
print('from D')
pass
class A(B,C,D):
def test(self):
print('from A')
pass
a1 = A()
a1.test()
2、封装
封装是一种思想,不是一种技术手段
解释:在类中,封装就是把一堆属性放到一个对象中
目的:方便存取,通过对象.属性的方式获取属性
方式:变量 ---> 数据属性
函数 ---> 方法属性
用到封装思想的有:
列表、字典、集合等
函数、模块、包等
3、多态
指的是一类事物有多种形态,即可以将类A细分为多种类B,C,D,他们具有相同的属性(不用考虑他们的独立属性),但是这些属性值可能不相同