描述
當看到一隻鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那麼這隻鳥就可以被稱爲鴨子🦆。”
特性
- 關注點在對象的行爲或接口,而不是類型
- 比如 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()