多态
1.什么是多态
同一种类型的实物,不同的形态(名称相同,实现的功能不同)
2,多态的目的:
在不知道具体类型的情况下,统一对一堆对象的调用方法的规范
如何实现使用方法统一(多态的表现形式)
继承父类:
-耦合度高,扩展性差
直接继承,子类继承时需重名覆盖定义父类的属性或方法
继承抽象类
-耦合度极高,扩展性极差 引用abc模块,
父类需要继承metaclass = abc.ABCMeta
父类中,需要装饰@ABC.abstractmethod
从而使子类在继承父类如果不重名覆盖定义就会报错,
在父类里边进行装饰的方法或属性必须被重名覆盖,不然会报错
鸭子类型
-耦合度低,扩展性强
不需要模块限制,不需要父类继承,
但是在定义的时候都按照统一的规范去编写
绑定方法与非绑定方法:
绑定方法:
绑定给谁,就应该由谁来调用,谁来调用都将谁当做第一个参数传入
1,绑定给对象的方法,类中定义得风寒束默认就是绑定给对象的
2,绑定给累的方法,为类中的定义的函数加上一个装饰classmethod
非绑定方法:
即不与类绑定,也不与对象绑定,意味着对象和类都是可以调用的,无论谁来调用都是一个普通的函数吗,
没有自动传值的效果方式是 @staticmethod
注意:使用绑定(绑定对象或类)是由函数内部需要参数来源决定的,如果函数并不需要参数,就可以采用非绑定方法
isinstance :判断一个对象是否是另一个类的实例
issubclass:判断一个类是否是另一个类的子类
反射:
指的是通过字符串对对象的属性或方法进行操作
hasattr:通过“字符串”判断对象的属性或方法是否存在
getatter :通过“字符串”获取对象的属性或方法
setatter :通过“字符串”设置对象的属性或方法
delattr: 通过 “字符串” 删除对象的属性或方法