Python中,什么是鸭子类型(duck typing)🦆

描述

当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子🦆。”

特性

  • 关注点在对象的行为或接口,而不是类型
  • 比如 file, StringIO, socket对象 都支持 read/write 方法(file like object)
  • 比如定义了 __iter__ 魔术方法的对象都可以用 for 迭代

示例

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

class Person:
  def quack(self):
    print("I am a person ,But I can gua gua too")

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(isinstance(donald, Duck))

game()
posted @ 2021-06-26 16:33  皎然CEO  阅读(199)  评论(0编辑  收藏  举报