PHP前端开发

分享python中鸭子类和多态实例

百变鹏仔 3小时前 #Python
文章标签 鸭子

下面小编就为大家带来一篇老生常谈python之鸭子类和多态。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一、 什么是多态

一种类型具有多种类型的能力
允许不同的对象对同一消息做出灵活的反应
以一种通用的方式对待个使用的对象
非动态语言必须通过继承和接口的方式来实现

二、 python中的多态

通过继承实现多态(子类可以作为父类来使用)子类通过重载父类的方法实现多态class Animal:  def move(self):    print('animal is moving....')class Dog(Animal):  passdef move(obj):  obj.move()>>>move(Animal())>>>animal is moving....>>>move(Dog())>>>animal is moving....class Fish(Animal):  def move(self):    print('fish is moving....')>>>move(Fish())>>>fish is moving....

三、 动态语言和鸭子类型

立即学习“Python免费学习笔记(深入)”;

变量绑定的类型是不确定的

函数和方法可以接收任何类型的参数

调用方法时不检查提供的参数类型

调用是否成功有参数的方法和属性确定,调用不成功则抛出错误

不用实现接口

class P:  def init(self, x, y):    self.x = x    self.y = y  def add(self, oth):    return P(self.x+oth.x, self.y+oth.y)  def info(self):    print(self.x, self.y)class D(P):  def init(self, x, y, z):    super.init(x, y)    self.z = z  def add(self, oth):    return D(self.x+oth.x, self.y+oth.y, self.z+oth.z)  def info(self):    print(self.x, self.y, self.z)class F:  def init(self, x, y, z):    self.x = x    self.y = y    self.z = z  def add(self, oth):    return D(self.x+oth.x, self.y+oth.y, self.z+oth.z)    def info(self):    print(self.x, self.y, self.z)  def add(a, b):  return a + bif name == 'main':  add(p(1, 2), p(3, 4).info())  add(D(1, 2, 3), D(1, 2, 3).info())  add(F(2, 3, 4), D(2, 3, 4).info())

四、 多态的好处

可实现开放的扩展和修改的封闭

使python程序更加的灵活