我是靠谱客的博主 大气日记本,最近开发中收集的这篇文章主要介绍3.鸭子类型和多态鸭子类型和多态,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

鸭子类型和多态

鸭子类型: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.鸭子类型和多态鸭子类型和多态所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部