广度优先广度优先(所有新式类所有新式类)::
在走到下一个继承点时,下一个点可以从广度和深度两个方向走的时候,总是先走广度,再走深度。
广度优先遵循的C3算法算法
如果是单继承 那么总是按照从子类->父类的顺序来计算查找顺序
如果是多继承 需要按照自己本类,父类1,父类2…的这种继承顺序
继承顺序继承顺序
```python
# 继承顺序
# A(0) = [AO] # B(A) = [BAO] # C(A) = [CAO] # D(B) = [DBAO] # E(C) = [ECAO] # F(D, E) = C3(D(B) + E(C))
# = [F] + D(B) + E(C)
# F = [DBAO] + [ECAO] # FD = [BAO] + [ECAO] # FDB = [AO] + [ECAO] # FDBE = [AO] + {CAO}
# FDBEC = [AO] + [AO] # FDBECA= [O] + [O] # FDBECAO
```
- **merge的规则**
- 如果一个类出现在从左到右所有顺序的最左侧,并且没有在其他位置出现,那么先提出来作为继承顺序中的一个
- 一个类出现在从左到右顺序的最左侧,并没有在其他顺序中出现,那么先提出来作为继承顺序中的一个
- 如果从左到右第一个顺序中的第一个类出现在后面且不是第一个,那么不能提取,顺序向后继续找其他顺序中符合上述条件的
类
- **用mro,查看继承顺序 类名.mro()**
进阶:通过继承实现类的开发规范进阶:通过继承实现类的开发规范(工作工作)
抽象类是一个开发规范抽象类是一个开发规范,约束规范他的所有子类必须实现一些和他同名的方法
实现抽象类的方式实现抽象类的方式
自己手动抛异常手动抛异常方式
raise 异常名(提示信息) # 主动抛异常
# class 父类:
# def 子类必须实现的方法名(self,参数们):
# raise NotImplementedError('提示信息')
# class 子类(父类):
# def 父类要求实现的方法(self,参数们):
# print('''code''')