标签:面向对象 判断 是什么 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("///////////////////////////")
标签:面向对象 判断 是什么 color 执行 简单 重写 class 而不是
原文地址:https://www.cnblogs.com/ljh-study/p/13846470.html