zoukankan      html  css  js  c++  java
  • Python21基础 多态性

      1 #多态性
      2 
      3 #多态的概念
      4 #发生多态的两个前提条件
      5 #   1.继承,多态一定发生在父类与子类之间
      6 #   2.重写,子类重写父类的方法
      7 #简单来说
      8 #多态就是在多个子类继承了同一个父类后
      9 #重构父类的方法,然后同样的方法在不同类中存在不同的形式
     10 #这就是多态
     11 
     12 class animals(object):
     13     def put_s(self):
     14         print("动物")
     15 
     16 class dog(animals):
     17     def put_s(self):
     18         print("狗哥")
     19 
     20 class cat(animals):
     21     def put_s(self):
     22         print("猫哥")
     23 
     24 a1=animals()
     25 a2=dog()
     26 a3=cat()
     27 
     28 a1.put_s()
     29 a2.put_s()
     30 a3.put_s()
     31 #这里调用了方法put_s,但是三个方法输出结果都是不一样的
     32 #这里就存在多态
     33 
     34 #一般来讲,Python是动态面向对象语言,多态的意义不是像Java静态语言那样重要
     35 
     36 print("//////////////////////////////")
     37 
     38 #类型检查
     39 #其实不论多态对Python来说有多重要
     40 #多态总是存在 
     41 #这里我们可以对其进行检查
     42 #通过使用isinstance(object,classinfo)函数来检查
     43 #   isinstance(object,classinfo)中
     44 #   是检查object实例,注意,object是实例!!!!!!
     45 #   是否由classinfo类或者其子类创造
     46 
     47 #依然拿上面的三个类做例子
     48 '''
     49 class animals(object):
     50     def put_s(self):
     51         print("动物")
     52 
     53 class dog(animals):
     54     def put_s(self):
     55         print("狗哥")
     56 
     57 class cat(animals):
     58     def put_s(self):
     59         print("猫哥")
     60 
     61 a1=animals()
     62 a2=dog()
     63 a3=cat()
     64 
     65 '''
     66 print(isinstance(a1,dog))
     67         #判断,a1实例是不是由dog类创造
     68 print(isinstance(a2,dog))
     69         #判断,a2实例是不是由dog类创造
     70 print(isinstance(a3,dog))
     71         #判断,a3实例是不是由dog类创造
     72 print(isinstance(a3,animals))
     73         #判断,a3实例是不是由animals类创造
     74 
     75 #尝试
     76 #在写isinstance(obj,class_or_tuple)
     77 #我们发现函数说明中显示可以用来检测元组
     78 #于是我们尝试一下
     79 
     80 t1=(0,1,2,3,4)
     81 #print(isinstance(2,t1))
     82 #报错,原因是2是int而不是一个实例
     83 t2=2
     84 #print(isinstance(t2,t1))
     85 #isinstance() arg 2 must be a type or tuple of types
     86 #任然报错
     87 #这里的她t2依然是以int类型存在
     88 
     89 #换一种思路,就是元组里面可以存放类吗?
     90 t3=(animals,dog,cat)
     91 #编译运行可以的
     92 print(isinstance(a2,t3))
     93 #   判断dog()实例a2是不是在这这个元组中的三个不同类或者其子类创造
     94 
     95 print("//////////////////////////////////")
     96 
     97 #鸭子类型
     98 #""一只鸟,走起来像鸭子,游起来像鸭子,那他就是一只鸭子""
     99 #简单来说,鸭子类型不在乎变量的类型,只在乎变量所具有的方法
    100 #鸭子类型像多态一样工作,但是没有继承,只有像鸭子一样的行为,就是方法
    101 
    102 #还是拿上面的三个类举例子
    103 '''
    104 class animals(object):
    105     def put_s(self):
    106         print("动物")
    107 
    108 class dog(animals):
    109     def put_s(self):
    110         print("狗哥")
    111 
    112 class cat(animals):
    113     def put_s(self):
    114         print("猫哥")
    115 
    116 a1=animals()
    117 a2=dog()
    118 a3=cat()
    119 
    120 '''
    121 #定义一个鸭子类型
    122 def duck(sth):  #接收一个数据
    123         #不论是什么类型的
    124     sth.put_s()
    125         #直接执行这个数据的方法
    126         #这说明只要满足
    127         #就会执行,不用去考虑是不是继承形成多态
    128            
    129 duck(animals())
    130 duck(dog())
    131 duck(cat())
    132 
    133 print("///////////////////////////")
    悟已往之不谏,知来者之可追
  • 相关阅读:
    Linux、Windows网络工程师面试题精选
    (转)JVM 垃圾回收算法
    笔试题学习
    使用Spring的好处
    JAVA保留字与关键字
    经典算法问题的java实现
    详解平均查找长度
    13种排序算法详解
    Grunt
    sublimeText
  • 原文地址:https://www.cnblogs.com/ljh-study/p/13846470.html
Copyright © 2011-2022 走看看