多态
定义时的类型与运行时的类型不同
例如定义一个包含类名的列表,定义时是一个个的变量,以实例化方式运行时却是一个类。
class Cat(object): def info(self): print("i am cat") class Dog(object): def info(self): print("i am dog") class Duck(object): def info(self): print("i am duck") animal_list = [Cat, Dog, Duck] # 变量 for animal in animal_list: animal().info()
鸭子类型
多态的概念是应用于如Java,C#这类强类型语言中,而python更崇尚‘鸭子类型’。
动态语言调用实例方法时不检查类型,只要方法存在,参数正确,就可以调用。并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子“,就把它看作鸭子。
比如列表中的extend的函数,她的参数要求传入一个可迭代对象,这样我们就可以传入“字符串,列表,元组”等可迭代对象
a = [1, 2] b = [2, 3] c = (5, 6) d = "abc" a.extend(b) a.extend(c) a.extend(d) print(a)