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

何谓鸭子类型

时间:2019-09-01 23:50:01      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:rest   socket   魔术方法   col   font   nal   read   on()   接口   

“如果我们看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来也像鸭子,那么这只鸟就可以被称之为鸭子。”

 

  • 关注点在于对象的行为, 而非类型(duck typing)
  • 比如file,StringIO, socket对象都支持read/wtite方法(file like object)。
  • 再比如定义了__iter__魔术方法的对象可以使用for迭代。

 

举个例子

 

class Duck:
    def quack(self):
        print("gua gua gua")


class Person:
    def quack(self):
        print("我是人类,我也会gua, gua, gua")


def in_the_forest(duck):
    duck.quack()



def game():
    donald = Duck()
    john = Person()
    in_the_forest(donald)
    in_the_forest(john)
    print(type(donald))
    print(type(john))
    print(isinstance(donald, Duck))
    print(isinstance(john, Person))


game()

 

 

 

 

关注点在于对象有哪些接口和方法,而非它是什么类型。

 

何谓鸭子类型

标签:rest   socket   魔术方法   col   font   nal   read   on()   接口   

原文地址:https://www.cnblogs.com/dairuiquan/p/11444140.html

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