实例一:
#!/usr/bin/env python #coding:utf-8 """ 什么是多态? 1、一种类型具有多种类型的能力 2、允许不同的对象对同一消息做出灵活的反映 pytyon 中的多态 1、通过继承实现多态(子类可作为父类使用) 2、子类通过重载父类的方法实现多态 动态语言与鸭子模型 1、变量绑定的类型具有不确定性 2、函数和方法可以接收任何类型的参数 3、调用方法时不检查提供的参数类型 4、调用时是否成功由参数的方法和属性确定 5、调用不成功则抛出错误 6、Python中不用定义接口 """ class Animal: def move(self): print ‘Animal is moving...‘ class Dog(Animal): pass def move(obj): obj.move() class Cat(Animal): def move(self): print ‘Cat is moving‘ class Sheep(Animal): def move(self): print ‘Sheep is moving‘ a=Animal() move(a) d=Dog() move(d) move(Sheep()) move(Cat()) a=12 a=1.2 a=Cat() def tst(foo): print type(foo) tst(3) tst(3.3) class M: def move(self): print ‘M is moving‘ move(M())
结果:
Animal is moving... Animal is moving... Sheep is moving Cat is moving <type ‘int‘> <type ‘float‘> M is moving
实例二
#!/usr/bin/env python #coding:utf-8 class Point: def __init__(self,x,y): self.x = x self.y = y def __add__(self,oth): return Point(self.x + oth.x , self.y + oth.y) def info(self): print(self.x,self.y) # class D3Point(Point): # def __init__(self,x,y,z): # super().__init__(x,y) # self.z = z # def __add__(self,oth): # return D3Point(self.x + oth.x , self.y + oth.y , self.z + oth.z) # def info(self): # print(self.x,self.y,self.z) class D3Point: def __init__(self,x,y,z): self.x = x self.y = y self.z = z def __add__(self,oth): return D3Point(self.x + oth.x , self.y + oth.y , self.z + oth.z) def info(self): print(self.x,self.y,self.z) def myadd(a,b): return a + b #相同的类型才能相加,调用的是__add__方法 if __name__ == ‘__main__‘: myadd(Point(1,2),Point(3,4)).info() #(4, 6) myadd(D3Point(1,2,3),D3Point(4,5,6)).info() #(5, 7, 9)
时间: 2024-11-02 13:51:33