“如果我们看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来也像鸭子,那么这只鸟就可以被称之为鸭子。”
- 关注点在于对象的行为, 而非类型(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()
关注点在于对象有哪些接口和方法,而非它是什么类型。
原文地址:https://www.cnblogs.com/dairuiquan/p/11444140.html
时间: 2024-11-02 13:39:02