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


Posted in Python onJune 13, 2017

一、 什么是多态

<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之鸭子类和多态就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Web开发模板引擎优缺点总结
May 06 Python
Django返回json数据用法示例
Sep 18 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
python脚本实现验证码识别
Jun 07 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
Aug 01 Python
python leetcode 字符串相乘实例详解
Sep 03 Python
python 调用有道api接口的方法
Jan 03 Python
Python实现计算字符串中出现次数最多的字符示例
Jan 21 Python
Python 实现微信防撤回功能
Apr 29 Python
python3使用print打印带颜色的字符串代码实例
Aug 22 Python
django实现支付宝支付实例讲解
Oct 17 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 11 Python
浅谈scrapy 的基本命令介绍
Jun 13 #Python
python生成词云的实现方法(推荐)
Jun 13 #Python
Python实现Linux中的du命令
Jun 12 #Python
python正则表达式的使用
Jun 12 #Python
Python简单删除列表中相同元素的方法示例
Jun 12 #Python
Python实现删除列表中满足一定条件的元素示例
Jun 12 #Python
Ubuntu 下 vim 搭建python 环境 配置
Jun 12 #Python
You might like
php下批量挂马和批量清马代码
2011/02/27 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
Javascript幻灯片播放功能实现过程解析
2020/05/07 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
python计算auc指标实例
2017/07/13 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
python实现宿舍管理系统
2019/11/22 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
python利用appium实现手机APP自动化的示例
2021/01/26 Python
美国女性服饰销售网站:Nasty Gal(坏女孩)
2016/07/26 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
百度JavaScript笔试题
2015/01/15 面试题
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
快递业务员岗位职责
2014/01/06 职场文书
三年大学生活自我鉴定
2014/01/21 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
交通安全寄语大全
2014/04/08 职场文书
药品业务员岗位职责
2014/04/17 职场文书
运动会演讲稿100字
2014/08/25 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js