对于静态语言来说,如果函数内需要的是Animal类型,则传入的对象必须是Animal类型或者它的子类,不然是调用不了其run方法的。
但是python属于一种动态语言,传入的不一定钥匙Animal类型,只需要保证传入的对象有一个run()方法就可以了
比如:
class Animal(object):
def run(self):
print('animal is running')
class man(object):
def run(self):
print('man is running')
def runtwice(animal):
animal.run()
a=Animal()
b=man()
c=runtwice(b)
print(a)
man和animal是不同的类,但是在调用runtwice函数时,参数指明了要用animal类型,但是我们传入的只是一个具有run方法的man类。然而这样也是可以实现的,这就是动态语言的鸭子类型,只要一个对象看起来像鸭子,跑起来像鸭子,那么它就可以被看作成鸭子。