面向对象之继承

什么是继承?

专业角度: 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

img

答案 类的MRO: Foo-> H -> G -> F -> E -> D -> B -> A -> C.

新式类的多继承

一般我们用 mro方法就行

举例

print(A.mro())
posted @ 2020-02-29 22:14  一起奥利给  阅读(178)  评论(0编辑  收藏  举报