多态是oop的三大特征之一
字面意思:多种形态多种状态
一个事物具备多种形态
列如:水 具备水蒸气 冰
官方:不同对象可以响应(调用)同一个方法产生不同的结果
多态不是新的技术 我们再编写面向对象的程序时 其实就有多态存在
对于对象的使用者而言无需关心对象的具体实现甚至不用关心具体类型
极大降低了使用难度
鸭子类型
python不会强行限制必须干或者不干什么
就比如封装中的私有属性 你也是可以强行访问的
同理再多态中 子类中你可以不使用ABC模块
python崇尚鸭子类型
如果一个对象长得像鸭子叫声像鸭子走路像鸭子那么他就是鸭子
isinstance
判断一个对象是否时一个类的实例
issubclass
判断一个类是否是一个类的子类
参数1是 儿子 参数2 是老子
__str__
打印对象是自动触发
可以用于定制对象的打印格式会在print对象自动触发
__del__
对象从内存中被删除时自动触发执行
1.程序运行完毕时
2.手动调用del
作用:用于做一些清理操作 比如开启文件资源 就需要手动关闭
使用场景:当你的对象在创建时同时开启了不属于解释器的资源
就需要在del中手动关闭
也称之为析构函数
反射(反省)
一个对象具备可以修改自身属性即方法的能力
从代码级别来看 反射就是通过字符串来操作对象的属性
hasattr 是否存在属性
getattr 获取某个属性
setattr 设置或修改属性
delattr 删除某个属性