码迷,mamicode.com
首页 > 编程语言 > 详细

Python21基础 多态性

时间:2020-10-20 16:45:02      阅读:39      评论:0      收藏:0      [点我收藏+]

标签:面向对象   判断   是什么   color   执行   简单   重写   class   而不是   

  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("///////////////////////////")

 

Python21基础 多态性

标签:面向对象   判断   是什么   color   执行   简单   重写   class   而不是   

原文地址:https://www.cnblogs.com/ljh-study/p/13846470.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!