多态
多态
-
因为python中变量不用声明,所以不存在父类引用指向子类对象的多态类型,同时python不支持重载,所以python的使用没有java那么明显,所以在python中刻意提到多态的意义不是特别大
-
什么是多态?
-
一个类表现出来的多种形态,实际上是通过继承来完成的,主要指的是多个子类继承自一个父类,子类是属于父类的,通过父类寻找子类(狗类继承自动物类,猫类也继承自动物类,那么狗是动物类型的,猫也是动物类型的,在这个例子里,动物这个类表现出了狗和猫的形态)
-
python中多态的作用:
- 让具有不同功能的函数使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数
-
python中多态的特点:
-
增强代码的外部调用灵活度,让代码更加通用,兼容性比较强
-
多态是调用方法的技巧,不会影响到内部设计
-
class A: def fly(self): a=1+2 return a class B: def fly(self): a=2+2 return a def f(obj): return obj.fly() a = A() print(f(a)) b = B() print(f(b)) 得: 3 4
-
-
多态的应用场景
- 对象所属的类之间没有继承关系
class Duck: #鸭子类 def fly(self): print('鸭子沿着地面飞起来了') class Swan: #天鹅类 def fly(self): print('天鹅在空中翱翔') class Plane: #飞机类 def fly(self): print('飞机隆隆的飞机来了') def a(obj): obj.fly() duck=Duck() a(duck) swan=Swan() a(swan) plane=Plane() a(plane) 得: 鸭子沿着地面飞起来了 天鹅在空中翱翔 飞机隆隆的飞机来了
-
对象所属的类之间有继承关系
class Gradapa: #爷爷 def __init__(self,money,obj): self.money=money self.obj=obj print(money) print(obj) def p(self): print('this is gradapa') class Father(Gradapa): #父亲类 def __init__(self,money,job): #money:工资 job:职业 super().__init__(money,job) self.job=job def p(self): print('this is father,我重写了父类的方法') class Mother(Gradapa): #母亲类 def __init__(self,money,job): #money:工资 job:职业 super().__init__(money,job) self.job=job def p(self): print('this is father,我重写了妈妈类的方法') def fc(obj): return obj.p() gradapa=Gradapa(3000,'农民') father=Father(2000,"工人") mother=Mother(1000,"老师") fc(gradapa) fc(father) fc(mother)
鸭子类型
- (不确定对错自己想的)某个类在没有继承关系的情况下使用了某个特定的功能,这个特定功能就是这个类的鸭子类型