多态:在编辑时无法确定状态,在运行时才确定。由于Python为动态语言,参数类型没定,所以本身即是多态的
1:由继承实现多态
1 class Animal: 2 def move(self): 3 PRint('Animal is moving') 4 5 class Dog: 6 def move(self): 7 print('Dog is running') 8 9 class Fish:10 def move(self):11 print('Fish is swimming')12 13 Animal().move()14 Dog().move()15 Fish().move()
结果:
Animal is moving
Dog is running
Fish is swimming
2:通过重载实现多态
1 #在子类中:2 3 class child:4 def start(self):5 print('....')6 super().start()7 print('......')
3:动态语言特性(参数类型不定)与鸭子模型
例子1:类实例为参数
class Animal: def move(self): print('Animal is moving')class Dog: def move(self): print('Dog is running')class Fish: def move(self): print('Fish is swimming')def move(obj): #obj为实例参数 obj.move() move(Animal())move(Dog())move(Fish())
----------------类作为参数-------------
class Moveable: def move(self): print('Move...')class MoveOnFeet(Moveable): def move(self): print("Move on Feet.")class MoveOnWheel(Moveable): def move(self): print("Move on Wheels.") #------------------------------------------------------------------- class MoveObj: def set_move(self,moveable): #moveable为类 self.moveable = moveable() def move(self): self.moveable.move() #通过moveable实例调用到不同的类class Test: def move(slef): print("I'm Fly.")if __name__ == '__main__': m = MoveObj() m.set_move(Moveable) m.move() m.set_move(MoveOnFeet) m.move() m.set_move(MoveOnWheel) m.move() m.set_move(Test) m.move()
结果:
Move...
Move on Feet.
Move on Wheels.
I'm Fly.
例子2:函数名为参数
def movea():
print('Move a.')
def moveb():
print('Move b.')
class MoveObj:
def __init__(self,moveable): #moveable为函数参数
self.moveable = moveable #绑定函数名参数
self.moveable() #调用函数
if __name__ == '__main__':
a = MoveObj(movea)
b = MoveObj(moveb)
结果:
move a
move b
新闻热点
疑难解答