先看看代码,稍后我再分析

class Person:def run(self):print("Person can run")
class Animal:def run(self):print("Animal can run")
class Robot:def run(self):print("Robot can run")for i in [Person,Animal,Robot]:i().run()

打印的结果;

Person can run
Animal can run
Robot can run
  1. 大家要理解 为什么 可以 这样写a=Person, 类 函数可以作为对象, 之前文章有介绍过.

  2. python 的变量是没有指定类型的, 拿来就直接赋类型就行了, 这就是 和静态语言java 的区别. 缺点是不运行是不知道有问题的.

  3. [Person,Animal,Robot] 这个三个类一定要有同样的方法 run, 才能实现 ,这就是 鸭子类型的概念

  4. “当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。” 实际他是不关心你是不是鸭子,我只看你会不会像鸭子走路, 叫,游泳. 都会归为一类. 都可以调用共同的方法,或者属性.

  5. 如果对这个例子不太理解我再举个简单例子 如下

a=['Andy','Xiuwu','Maggie']
name_tuple=['Andy01','Xiuwu01','Maggie01']
name_set=set()name_set.add("Andy3")
name_set.add("Xiuwu3")a.extend(name_tuple)
print(a)#注意 extend 语法是  def extend(self, iterable):    iterable 要是可迭代类型. 可没有说 只是list 类型# ,是个总的类型要求可迭代. 所以思维要扩散.
# iterable  隐藏调用了 __iter__  和 __getitem__, 魔法函数, 所以魔法函数会改变对象的类型,这个要切记, 下边我在举个例子吧.class Person:def __init__(self,person_list):self.person_list=person_listdef __getitem__(self, item):return self.person_list[item]#下边我们就可以用 这个 迭代类型对象  看好了name_tuple.extend(Person(a))
#说明 Person(a)这个是可迭代了类型, 由于类Person 调用了 getitem 魔法函数 导致的.

打印的结果如下 :

['Andy', 'Xiuwu', 'Maggie', 'Andy01', 'Xiuwu01', 'Maggie01']
['Andy01', 'Xiuwu01', 'Maggie01', 'Andy', 'Xiuwu', 'Maggie', 'Andy01', 'Xiuwu01', 'Maggie01']

Python3:鸭子类型和多态相关推荐

  1. java实现鸭子类型_鸭子类型和多态

    鸭子类型与多态 内容鸭子类型和多态 抽象基类(abc模块) 使用isinstance和type的区别 类属性和实例属性 类属性和实例属性查找顺序 Python对象的自省机制 super函数 鸭子类型 ...

  2. 4.1 鸭子类型和多态

    慕课网课程:Python高级编程和异步IO并发编程 C++中如何实现多态: class Mammal { public:virtual void Speak() const {std::cout< ...

  3. Python鸭子类型和多态

    补充:list.extend()里面不只是list只要是可迭代对象都可,包括生成器等 getitem魔法函数一定要有报错条件退出 def __getitem__(self, item):return ...

  4. Python中鸭子类型与多态介绍

    鸭子类型是Python中一种独特的编程方式,指的是一种动态类型的概念(只要一只动物走路像鸭子,叫声像鸭子,那么它就可以被当做鸭子使用). 这意味着在Python中,您可以使用多个不同的类对象来执行相同 ...

  5. python 多态 知乎_Python鸭子类型和多态

    鸭子类型 维基百科解释: 当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被称为鸭子. duck typing:在程序设计中是动态类型的一种风格.在这种风格中,一个对象有效的 ...

  6. 面向对象的接口类 以及鸭子类型

    1.接口类,抽象类. 2.鸭子类型(Python多态)(Python三大特性之一)Python封装 1.接口类和抽象类只是在工作中书写的一种规范. class QQ: def  pay(self,mo ...

  7. 设计模式-鸭子类型1

    什么是鸭子类型 如果走起来是鸭子,叫起来是鸭子,那么它就是鸭子.亦或者说,一个食物无论是面制品,还是豆制品,只要吃起来是牛肉味,它就是牛肉干. 鸭子类型-多态的示例 如果是初学者,看到一些编程思想的东 ...

  8. Python 语言中的 “鸭子类型”

    Python 语言中的 "鸭子类型" 继承 多态 鸭子类型 不要检查它是不是鸭子.它的叫声像不像鸭子.它的走路姿势像不像鸭子,等等.具体检查什么取决于你想使用语言的哪些行为.(co ...

  9. Python3中的多态 ,鸭子类型

    多态的概念 : -一个对象具有多种形态 , 在不同的使用环境中以不同的形态展示其功能 , 称该对象具有多态特征 鸭子类型 : -鸭子类型是一种特殊的调用现象 , 当对象在语法层面能够满足调用关系 , ...

最新文章

  1. BUUCTF 特殊的BASE64
  2. 如何从 0 到 1 打造团队 PC/H5 构建工具
  3. WebAssembly和Blazor:解决了一个存在十年的老问题
  4. bat脚本:Java一键编译(Javac java)
  5. python脚本实现ipv6的ddns功能
  6. uni-app 更改默认组件样式
  7. Spring Cloud随记----分布式配置中心再探---消息总线的引入
  8. java byte 编码_java字节编码总结
  9. 【转载】怎样编写CSS?
  10. 高德地图导航SDK使用
  11. HUD1873看病要排队
  12. Butterfly主题背景魔改
  13. Cross-scene Crowd Counting via Deep Convolutional Neural Networks2015论文笔记
  14. 覆盖常见四大应用场景,华为云CDN能够更好满足企业业务加速需求
  15. 麒麟子Cocos Creator实用技巧八:回合战棋类RPG战斗效果
  16. 在windows本地创建svn及遇到错误:svn create repository here 报错
  17. 关于floodlight编译
  18. [Python]在代码中怎样发送Ctrl+C或其他ASCII编码的控制字符
  19. java用三目运算写判断闰年_闰年与成绩的判断--2019年3月25日
  20. 计算机二级——公共基础+WPS考点

热门文章

  1. UE4 关卡蓝图实现开关门
  2. 什么是自底向上/自上而下的显著性目标检测?
  3. 地理空间索引:线段与多边形的GeoHash编码
  4. python爬虫,g-mark网站图片数据爬取及补坑
  5. 第三十七章 立方体贴图总结
  6. CSS中的行盒(line-boxes)和行内盒子(line-box)
  7. shell脚本编写简易教程
  8. Embedding技术
  9. 9.七言律诗和绝句的句型及平仄格式
  10. 婴儿体重不用计算机怎么算,测量宝宝体重计算器