首页 > 学院 > 开发设计 > 正文

Python多态

2019-11-14 16:59:25
字体:
来源:转载
供稿:网友

多态:在编辑时无法确定状态,在运行时才确定。由于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

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表