面向对象中多态以及多态的实现
一,多态的概念:
在现实世界里面来理解就是说,一种事物的多种形态。
比如水,固态,气态,液态等
在程序的世界是说,多个不同类的对象可以通过同一个方法,让不同类的对象产生不同的结果。
它并不是一种特殊的语法,而是一种形态。
优点:相对于使用者而言,很大程度上的降低了使用的难度。更加方便使用者
二,多态的实现以及案例
接口,抽象类,鸭子类型,都是可以写出具备多态的代码,最简单的就是鸭子类型的
案例:
class Chicken: def cry(self): print ('gggg') def spawn(self): print('下鸡蛋') class Duck(): def cry(self): print ('嘎嘎嘎') def spawn(self): print('下鸭蛋') j = Chicken() y = Duck() def mange(obj): obj.spawn() mange(j) mange(y)
三,一些函数以及方法的应用:
1,isinstance
这个函数是用来判断一个对象是否是某个类的实例
第一个参数是指需要判断的对象
第二个参数是指需要判断的类型
2,issubclass
这个函数是用来判断一个类是否是另一个类的子类
第一个参数是子类
第二个参数是父类
3,_ _str_ _
双下str 会在对象被转换为字符串时,转换的结果就是这个函数的返回值
使用场景:可以利用它来自定义对象的打印格式
4.del
当你手动删除对象时,会立马执行该函数,或者是程序运行结束时也会自动执行
使用场景: 当对象在使用过程中,打开了不属于解释器的资源时。
使用案例:
del class FileTool: def __init__(self,path): self.file = open(path,'rt',encoding = 'utf-8') self.a = 100 def read(self): return self.file.read() def __del__(self): self.file.close() tool = FileTool('a,txt')
5,call
当在调用对象时自动执行(就是对象加括号)
6,slots
该属性是一个类属性,用于优化对象内存的占用
优化的原理:将原本不固定的属性数量,变得固定。这样一来,解释器就不会为这个对象创建名称空间,从而达到减少内存的开销效果
一旦在类中出现了slots时 将会导致这个类的对象无法再添加新的属性
7,getattr,setattr,delattr
getatter 是当你用点访问属性时,如果属性不存在的时候会执行
setatter 当你用点来设置属性时,才执行
delatter 用 del 对象.属性 时。才会执行
四,运算符重载
当我们在使用某个符号时,python解释器都会为这个符号定义一个含义,同时调用对应的处理函数
原本自定义对象无法直接使用运算符来进行大小比较,但是我们可以自定义运算符来实现,让自定义对象也支持比较运算符