概述
先看看代码,稍后我再分析
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_list
def __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:鸭子类型和多态的全部内容,希望文章能够帮你解决Python3:鸭子类型和多态所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复