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']
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值