Python3:鸭子类型和多态
先看看代码,稍后我再分析
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
大家要理解 为什么 可以 这样写a=Person, 类 函数可以作为对象, 之前文章有介绍过.
python 的变量是没有指定类型的, 拿来就直接赋类型就行了, 这就是 和静态语言java 的区别. 缺点是不运行是不知道有问题的.
[Person,Animal,Robot] 这个三个类一定要有同样的方法 run, 才能实现 ,这就是 鸭子类型的概念
“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。” 实际他是不关心你是不是鸭子,我只看你会不会像鸭子走路, 叫,游泳. 都会归为一类. 都可以调用共同的方法,或者属性.
如果对这个例子不太理解我再举个简单例子 如下
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:鸭子类型和多态相关推荐
- java实现鸭子类型_鸭子类型和多态
鸭子类型与多态 内容鸭子类型和多态 抽象基类(abc模块) 使用isinstance和type的区别 类属性和实例属性 类属性和实例属性查找顺序 Python对象的自省机制 super函数 鸭子类型 ...
- 4.1 鸭子类型和多态
慕课网课程:Python高级编程和异步IO并发编程 C++中如何实现多态: class Mammal { public:virtual void Speak() const {std::cout< ...
- Python鸭子类型和多态
补充:list.extend()里面不只是list只要是可迭代对象都可,包括生成器等 getitem魔法函数一定要有报错条件退出 def __getitem__(self, item):return ...
- Python中鸭子类型与多态介绍
鸭子类型是Python中一种独特的编程方式,指的是一种动态类型的概念(只要一只动物走路像鸭子,叫声像鸭子,那么它就可以被当做鸭子使用). 这意味着在Python中,您可以使用多个不同的类对象来执行相同 ...
- python 多态 知乎_Python鸭子类型和多态
鸭子类型 维基百科解释: 当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被称为鸭子. duck typing:在程序设计中是动态类型的一种风格.在这种风格中,一个对象有效的 ...
- 面向对象的接口类 以及鸭子类型
1.接口类,抽象类. 2.鸭子类型(Python多态)(Python三大特性之一)Python封装 1.接口类和抽象类只是在工作中书写的一种规范. class QQ: def pay(self,mo ...
- 设计模式-鸭子类型1
什么是鸭子类型 如果走起来是鸭子,叫起来是鸭子,那么它就是鸭子.亦或者说,一个食物无论是面制品,还是豆制品,只要吃起来是牛肉味,它就是牛肉干. 鸭子类型-多态的示例 如果是初学者,看到一些编程思想的东 ...
- Python 语言中的 “鸭子类型”
Python 语言中的 "鸭子类型" 继承 多态 鸭子类型 不要检查它是不是鸭子.它的叫声像不像鸭子.它的走路姿势像不像鸭子,等等.具体检查什么取决于你想使用语言的哪些行为.(co ...
- Python3中的多态 ,鸭子类型
多态的概念 : -一个对象具有多种形态 , 在不同的使用环境中以不同的形态展示其功能 , 称该对象具有多态特征 鸭子类型 : -鸭子类型是一种特殊的调用现象 , 当对象在语法层面能够满足调用关系 , ...
最新文章
- BUUCTF 特殊的BASE64
- 如何从 0 到 1 打造团队 PC/H5 构建工具
- WebAssembly和Blazor:解决了一个存在十年的老问题
- bat脚本:Java一键编译(Javac java)
- python脚本实现ipv6的ddns功能
- uni-app 更改默认组件样式
- Spring Cloud随记----分布式配置中心再探---消息总线的引入
- java byte 编码_java字节编码总结
- 【转载】怎样编写CSS?
- 高德地图导航SDK使用
- HUD1873看病要排队
- Butterfly主题背景魔改
- Cross-scene Crowd Counting via Deep Convolutional Neural Networks2015论文笔记
- 覆盖常见四大应用场景,华为云CDN能够更好满足企业业务加速需求
- 麒麟子Cocos Creator实用技巧八:回合战棋类RPG战斗效果
- 在windows本地创建svn及遇到错误:svn create repository here 报错
- 关于floodlight编译
- [Python]在代码中怎样发送Ctrl+C或其他ASCII编码的控制字符
- java用三目运算写判断闰年_闰年与成绩的判断--2019年3月25日
- 计算机二级——公共基础+WPS考点