我是靠谱客的博主 包容黄蜂,这篇文章主要介绍Python3:鸭子类型和多态,现在分享给大家,希望可以做个参考。

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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()

打印的结果;

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

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

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

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

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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_list def __getitem__(self, item): return self.person_list[item] #下边我们就可以用 这个 迭代类型对象 看好了 name_tuple.extend(Person(a)) #说明 Person(a)这个是可迭代了类型, 由于类Person 调用了 getitem 魔法函数 导致的.

打印的结果如下 :

复制代码
1
2
3
['Andy', 'Xiuwu', 'Maggie', 'Andy01', 'Xiuwu01', 'Maggie01'] ['Andy01', 'Xiuwu01', 'Maggie01', 'Andy', 'Xiuwu', 'Maggie', 'Andy01', 'Xiuwu01', 'Maggie01']

最后

以上就是包容黄蜂最近收集整理的关于Python3:鸭子类型和多态的全部内容,更多相关Python3内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部