类型这个概念在静态语言中很常见,比如java中,我定义了class Dog 那dog其实就是一个类型,而且这个dog类型中有哪些方法是固定的,比如buck这个方法,这里要搞懂, 是buck这个方法放到dog类里面才使得这个方法有意义,这个方法你放到Pig类里面, pig类还是pig类,这里方法叫什么名字本身不重要,而类名才是最重要的。但是鸭子类型不一样,一个类的类名不重要,重要的是类中有哪些方法名,所以这里方法名就很重要了,比如一个类中有__iter__这个方法,那这个类就是一个可迭代类。如果dog实现了__iter__这个方法,那dog就是一个可迭代类,pig如果也实现了__iter__这个方法说明pig也是一个可迭代类,所有这里最重要的是方法名,方法名是固定的,当时你也可以自己去定义一套协议,比如你把所有实现了quark这个方法的类都是禽家类,所以这里你的类可以不用去继承任何类,你只要实现这个方法就是同一类型,java中必须大家都继承同一个类才能叫做家禽类。这个就是根本的区别,一个以继承关系为主(java),一个以实现的方法名为主