多态:在编辑时无法确定状态,在运行时才确定。由于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
时间: 2024-10-12 07:22:31