面向对象中多态以及多态的实现

一,多态的概念:

在现实世界里面来理解就是说,一种事物的多种形态。

比如水,固态,气态,液态等

在程序的世界是说,多个不同类的对象可以通过同一个方法,让不同类的对象产生不同的结果。

它并不是一种特殊的语法,而是一种形态。

优点:相对于使用者而言,很大程度上的降低了使用的难度。更加方便使用者

二,多态的实现以及案例

接口,抽象类,鸭子类型,都是可以写出具备多态的代码,最简单的就是鸭子类型的

案例:

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解释器都会为这个符号定义一个含义,同时调用对应的处理函数

原本自定义对象无法直接使用运算符来进行大小比较,但是我们可以自定义运算符来实现,让自定义对象也支持比较运算符

 

posted on 2019-07-29 22:34  IT界的蜉蝣  阅读(769)  评论(0编辑  收藏  举报

导航