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

 更新时间:2017年06月13日 08:30:42   投稿:jingxian  
下面小编就为大家带来一篇老生常谈python之鸭子类和多态。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一、 什么是多态

<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, 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 + b

if __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())

四、 多态的好处

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

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

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

相关文章

  • Flask登录注册项目的简单实现

    Flask登录注册项目的简单实现

    一个简单的用户注册和登录的页面,涉及到验证,数据库存储等等,本文主要介绍了Flask登录注册项目的简单实现,从目录结构开始,感兴趣的可以了解一下
    2021-05-05
  • Python如何对文件进行重命名

    Python如何对文件进行重命名

    这篇文章主要介绍了Python如何对文件进行重命名,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Python简易版停车管理系统

    Python简易版停车管理系统

    这篇文章主要为大家详细介绍了Python如何实现简易版停车管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Python asyncio的基本使用示例教程

    Python asyncio的基本使用示例教程

    Task主要作用是帮助event_loop调度,如果Task发现它打包的协程在await一个对象(执行一个io操作),则Task会挂起该协程的执行,把控制权交回event_loop,让他去运行其他Task,当该对象运行完毕,Task将打包的协程恢复运行,本文介绍Python asyncio使用小结,感兴趣的朋友一起看看吧
    2024-02-02
  • Python Django ORM与模型详解

    Python Django ORM与模型详解

    这篇文章主要介绍了django的ORM与模型的实现原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧v
    2021-11-11
  • 使用OpenCV实现迷宫解密的全过程

    使用OpenCV实现迷宫解密的全过程

    同学发了我张迷宫图片,让我走迷宫来缓解暴躁,于是乎就码了一个程序出来,下面这篇文章主要给大家介绍了关于使用OpenCV实现迷宫解密的相关资料,需要的朋友可以参考下
    2022-10-10
  • python 实现音频叠加的示例

    python 实现音频叠加的示例

    这篇文章主要介绍了python 实现音频叠加的示例,帮助大家更好的理解和使用python处理声音文件,感兴趣的朋友可以了解下
    2020-10-10
  • Python自然语言处理之切分算法详解

    Python自然语言处理之切分算法详解

    这篇文章主要介绍了Python自然语言处理之切分算法详解,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Python IndexError报错分析及解决方法

    Python IndexError报错分析及解决方法

    在Python编程中,IndexError是一种常见的异常类型,它通常发生在尝试访问序列(如列表、元组或字符串)中不存在的索引时,本文将深入分析IndexError的成因、表现形式,并提供相应的解决办法,同时附带详细的代码示例,需要的朋友可以参考下
    2024-07-07
  • Numpy之如何改变数组形状

    Numpy之如何改变数组形状

    这篇文章主要介绍了Numpy之如何改变数组形状问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论