魔法函数
魔术访达的一些说明
- 23-24
- 魔术方法并不是来自继承,而是python自带的这些方法,跟类没有关系
__getitem__方法
- 因为实现了__getitem__(),所以可以直接遍历这个student对象
__getitem__方法的参数
- item就是相当于数组的下标
- 13行
对象实例化对象进行切片操作
- 21行,甚至可以对实例对象进行切片操作
__len__方法
- 25行,对实例对象使用len方法,报错,
- 需要在16-17行实现__len__方法
__str__方法
- 调用print打印实例化对象的时候,实际上调用的是改对象的__str__方法
__abs__方法
__add__方法
鸭子类型
- 53行和58行,Cat和Dog类都有say()方法
说明
- 48行,只关注方法的类型,不关注方法的实现,
遍历执行
- 76-78行,把各个对象都添加到一个列表当中,然后遍历执行
extend扩展
- 91-92行
- list也可以扩展map,因为extend的参数要求一个可迭代对象就是可以进行扩展
抽象类的作用
- 25-26行,抽象类的作用
NotImplementedError
- 87,90,
- 如果这个RedisCache继承了CacheBase,但是没有重写get和set方法,就回抛出异常,当然这里是我们手动抛出异常
@abc.abstractmethod注释,来声明抽象方法
抽象基类的建议
- 127
- 尽量不去使用
- 128,129
- 尽量使用多继承和mixin代替抽象基类
isinstance和type的区别
isinstance
type
类变量
类修改类变量,实例对象访问类变量
- 30-32
实例对象修改类变量,类访问类变量
- 36
深层原理
- 38-39
多继承
深度优先
广度优先
mro
- 69,82
- 探索过__mro__可以查看多继承的查找顺序