面向对象之继承
什么是继承?
专业角度: B 继承 A类, B就叫做A的子类,派生类,
A叫做B的父类,基类,超类.
B类以及B类的对象使用A类的所有的属性以及方法.
字面意思: 继承就是继承父母所有的资产. 指向而已 自己空间并没有
继承的优点
节省代码.
增强的耦合性.
代码规范化.
单继承
1.子类对象执行父类的一切.
2.实例化对象一定一定会执行三件事. 一定会执行__init__
3.注意: 子类以及子类对象只能调用父类的属性以及方法,不能操作(增删改).
4.子类将父类的方法覆盖了,(重写父类的方法) 调用就不找父类 类指针
举例
class A:
pass
class B(A):
pass
# B 子类,派生类
# A 父类, 基类, 超类
# 单继承: 使用.
如何既要执行父类方法又要执行子类方法
# Animal.__init__(self, name, age, sex)
# # 方法二:
# # super(Person, self).__init__(name, age, sex)
# # super().__init__(name, age, sex)
# self.hobby = hobby
多继承
在python2x版本中存在两种类.:
⼀个叫经典类. 在python2.2之前. ⼀直使⽤的是经典类. 经典类在基类的根如果什么都不写.
⼀个叫新式类. 在python2.2之后出现了新式类. 新式类的特点是基类的根是object类。
python3x版本中只有一种类:
python3中使⽤的都是新式类. 如果基类谁都不继承. 那这个类会默认继承 object
经典类的多继承
虽然在python3中已经不存在经典类了. 但是经典类的MRO最好还是学⼀学. 这是⼀种树形结构遍历的⼀个最直接的案例. 在python的继承体系中. 我们可以把类与类继承关系化成⼀个树形结构的图. 来, 上代码:
在经典类中采⽤的是深度优先,遍历方案. 什么是深度优先. 就是⼀条路走到头. 然后再回来. 继续找下⼀个.
class A:
pass
class B(A):
pass
class C(A):
pass
class D(B, C):
pass
class E:
pass
class F(D, E):
pass
class G(F, D):
pass
class H:
pass
class Foo(H, G):
pass
答案 类的MRO: Foo-> H -> G -> F -> E -> D -> B -> A -> C.
新式类的多继承
一般我们用 mro方法就行
举例
print(A.mro())
非学,无以致疑;非问,无以广识