概述
鸭子类型和多态
鸭子类型:python因为是动态解释型语言,所以不受类型约束。本来就有多态属性。举例看下:
下面代码通过与Java代码比较,就可以看出python鸭子类型的额方便之处。1)java因为类型声明,需要通过各类继承一个抽象类来实现,python鸭子类型不需要继承一个类就能实现。
class Cat():
def say(self):
print("i am a cat")
class Dog():
def say(self):
print("i am a dog")
class Duck():
def say(self):
print("i am a duck")
object_list = [Cat,Dog,Duck]
for item in object_list:
item().say()
》》》》》》》》》》》》》》》》》》》》》》》》》》》》
i am a cat
i am a dog
i am a duck
2)extend方法可以在list后边追加一个可迭代对象。不用保持类型一致。
extend的说明文档里面,可以看到入参是一个迭代类型。
def extend(self, iterable): # real signature unknown; restored from __doc__
""" L.extend(iterable) -> None -- extend list by appending elements from the iterable """
pass
list1 = ['tom','jarry','hac']
list2 = ['tom1','jarry1','hac1']
name_tuple = ('王二','张三','李四')
name_set = set()
name_set.add('王麻子')
name_set.add('二狗子')
list1.append(list2)
print('append list2 --->',list1)
list1.extend(list2)
print('extend list2 --->',list1)
list1.extend(name_set)
print('extend name_set --->',list1)
list1.extend(name_tuple)
print('extend name_tuple --->',list1)
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
append list2 ---> ['tom', 'jarry', 'hac', ['tom1', 'jarry1', 'hac1']]
extend list2 ---> ['tom', 'jarry', 'hac', ['tom1', 'jarry1', 'hac1'], 'tom1', 'jarry1', 'hac1']
extend name_set ---> ['tom', 'jarry', 'hac', ['tom1', 'jarry1', 'hac1'], 'tom1', 'jarry1', 'hac1', '王麻子', '二狗子']
extend name_tuple ---> ['tom', 'jarry', 'hac', ['tom1', 'jarry1', 'hac1'], 'tom1', 'jarry1', 'hac1', '王麻子', '二狗子', '王二', '张三', '李四']
3)我们试着自己实现一个可迭代的类来试下。
可以看到extend 只要入参是可迭代的就行
class Three_dogs():
def __init__(self,dogs):
self.dog = dogs
#实现迭代
def __getitem__(self, item):
return self.dog[item]
list1 = ['tom','jarry','hac']
list1.extend(Three_dogs(['dog1','dog2','dog3']))
print(list1)
-------------------------------------------
['tom', 'jarry', 'hac', 'dog1', 'dog2', 'dog3']
最后
以上就是大气日记本为你收集整理的3.鸭子类型和多态鸭子类型和多态的全部内容,希望文章能够帮你解决3.鸭子类型和多态鸭子类型和多态所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复