Python多态

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

多态:在编辑时无法确定状态,在运行时才确定。由于Python为动态语言,参数类型没定,所以本身即是多态的

1:由继承实现多态

1classAnimal:2defmove(self):3PRint('Animal is moving')45classDog:6defmove(self):7print('Dog is running')89classFish:10defmove(self):11print('Fish is swimming')1213Animal().move()14Dog().move()15Fish().move()

结果:

Animal is moving

Dog is running

Fish is swimming

2:通过重载实现多态

1#在子类中:23classchild:4defstart(self):5print('....')6super().start()7print('......')

3:动态语言特性(参数类型不定)与鸭子模型

例子1:类实例为参数

classAnimal:defmove(self):print('Animal is moving')classDog:defmove(self):print('Dog is running')classFish:defmove(self):print('Fish is swimming')defmove(obj):#obj为实例参数obj.move()

move(Animal())

move(Dog())

move(Fish())

----------------类作为参数-------------

classMoveable:defmove(self):print('Move...')classMoveOnFeet(Moveable):defmove(self):print("Move on Feet.")classMoveOnWheel(Moveable):defmove(self):print("Move on Wheels.")#-------------------------------------------------------------------classMoveObj:defset_move(self,moveable):#moveable为类self.moveable =moveable()defmove(self):

self.moveable.move()#通过moveable实例调用到不同的类classTest:defmove(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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航