加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

老生常谈python之鸭子类和多态

发布时间:2020-12-17 08:20:52 所属栏目:Python 来源:网络整理
导读:一、 什么是多态 1一种类型具有多种类型的能力 2允许不同的对象对同一消息做出灵活的反应 3以一种通用的方式对待个使用的对象 4非动态语言必须通过继承和接口的方式来实现 二、 python中的多态 1通过继承实现多态(子类可以作为父类来使用)2子类通过重载父

一、 什么是多态

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

二、 python中的多态

<1>通过继承实现多态(子类可以作为父类来使用)
<2>子类通过重载父类的方法实现多态

class Animal:
  def move(self):
    print('animal is moving....')
class Dog(Animal):
  pass
def 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....

三、 动态语言和鸭子类型

<1>变量绑定的类型是不确定的

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

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

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

<5>不用实现接口

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,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,z):
    self.x = x
    self.y = y
    self.z = z

  def __add__(self,self.z+oth.z)
  
  def info(self):
    print(self.x,self.z)
  

def add(a,b):
  return a + b

if __name__ == '__main__':
  add(p(1,2),p(3,4).info())
  add(D(1,2,3),D(1,3).info())
  add(F(2,3,4),D(2,4).info())

四、 多态的好处

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

<2>使python程序更加的灵活

以上这篇老生常谈python之鸭子类和多态就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读