码迷,mamicode.com
首页 > 其他好文 > 详细

三、鸭子类型

时间:2019-04-28 20:42:52      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:int   操作   并且   object   检查   class   list   tom   pre   

1、什么是鸭子类型

“当看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来也像鸭子,那么这只鸟就可以被称为鸭子”。即如果其他类实现了一个类A的所有方法,那么其他类也可以看作是A类,在使用A类的地方同样可以使用实现了A类所有方法的其他类

2、实例

class Duck():
    def walk(self):
        print(I walk like a duck)
    def swim(self):
        print(i swim like a duck)

class Dog():
    def walk(self):
        print(this one walk like a duck) 
    def swim(self):
        print(this man swim like a duck)

def test(duck):
    duck.walk()
    duck.swim()

duck = Duck()
test(duck)

dog = Dog()
test(dog)

‘‘‘
I walk like a duck
i swim like a duck
this one walk like a duck
this man swim like a duck
‘‘‘

Dog类拥有和Duck类一样的walk和swim方法,那么当一个函数需要传入Duck类,并且用到Duck类的walk和swim方法,那么传入Dog类,也一样是可以运行的,函数并不会检查对象的类型是不是Duck类,只要它拥有walk和swim方法,就可以被正确调用

class Company(object):
    def __init__(self,employee_list):
        self.employee = employee_list
    def __getitem__(self,item):
         return self.employee[item]
company = Company(["tom","bob","jane"])
for em in company:
    print(em)

Company类实现了迭代相关的__getitem__魔法函数,Company类对应的对象company就可以当成一个迭代对象进行遍历

若Company类实现了集合、序列相关的魔法函数,那么它对应的对象同样可以当成一个集合、序列来操作

三、鸭子类型

标签:int   操作   并且   object   检查   class   list   tom   pre   

原文地址:https://www.cnblogs.com/slfh/p/10786108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!