个人理解的鸭子类型,如果不对还望指出
Topic source我觉得:def run_twice(animal):里面的animal理解不应该是class Animal,它实质就像是C语言中的形参,和class Animal没有半毛钱关系。就像class people一样,只要有run方法的都可以被def run_twice(animal)调用。
事实上,把run_twice改成:
def run_twice(a):
a.run()
a.run()
也是可以的,所以这里的run_twice(Animal)中“Animal”和任何类都没有关系
- 1
- 2
人渣14396
上面这段代码关键点在于people这个类,这个类他并没有继承Animal这个父类,这也就出现了上面廖老师所讲的鸭子类型,因为run_twice这个函数中传入的参数是animal的,而people这个类却和animal没有任何关系,但是其中却有run这个方法,所以在调用run_twice这个函数时仍不会报错,也能正常输出people类中的内容