zoukankan      html  css  js  c++  java
  • 面向对象中多态以及多态的实现

    一,多态的概念:

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

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

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

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

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

    二,多态的实现以及案例

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

    案例:

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

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

  • 相关阅读:
    JVM学习笔记之认识JDK(一)
    C#发送邮件异常:根据验证过程,远程证书无效
    windows下使用mysql双机热备功能
    批处理实现mysql的备份
    WebApi FormData+文件长传 异步+同步实现
    Oracle中已知字段名查询所在的表名
    mstsc遇到CredSSP加密Oracle修正
    使用subgit进行svn迁移至git(branch,tags)
    使用guava进行对字符串的加锁
    使用spring-data-solr做solr客户端
  • 原文地址:https://www.cnblogs.com/wujc3/p/11266251.html
Copyright © 2011-2022 走看看