多态,鸭子类型,反射

多态是OOP的三大特征之一:
字面意思:多种形态,多种状态
一个事物具备多种形态
例子:水:固态,液态,气态
官方解释:不同对象可以响应(调用)同一个方法 产生不同的结果

多态不是新技术,我们在编写面向对象的程序时,其实就有多态存在
对于对象的使用者而言,无需关心对象的具体实现,甚至不用关心具体类型
极大的降低了使用难度

鸭子类型:
python不会强行限制 必须干什么 或不干什么
就比如封装中的私有属性 你也是可以强行访问的
同理 在多态中 子类中你可以不适用abc模块
python崇尚鸭子类型

如果一个对象 长得像鸭子 叫声像鸭子 走路像鸭子 那么他就是鸭子
例子:猫长得像动物 叫声像动物 走路像动物 那么他就是动物

内置方法:
isinstance:判断一个对象是否是一个类的实例
print(isinstance(10,int)) = True
print(isinstance('abc',int)) = False
issubclass:判断一个类是否是一个类的实例
class A:
pass

class B(A):
pass
print(issubclass(B,A)) = True
print(issubclass(A,B)) = False
__str__:__str__可以用于定制对象的打印格式,会在print对象时自动触发执行
使用__str__时要用return返回字符串。
__del__:__del__在程序运行完毕时自动执行,将对象从内存中删除
有两种方式触发:1.程序运行完毕时
2.手动调用del
作用:用于做一些清理操作 比如开启了文件资源 就需要手动关闭
使用场景:当你的对象在创建时同时开启了不属于解释器的资源
就需要在del中来回收资源
也称之为析构函数 构造

反射:
也称为反省
一个对象具备可以修改自身属性及方法的能力
从代码级别来看 反射就是通过字符串来操作对象的属性(属性的增删改查)

hasattr 是否存在某个属性
getattr 获取某个属性
setattr 设置或修改属性
delattr 删除某个属性

posted @ 2019-02-21 17:10  XSHUshu  阅读(248)  评论(0编辑  收藏  举报