鸭子类型是什么意思了?
Topic sourcerun_twice中只是使用到了run方法 假设run_twice中还有animal.eat那传入的time就是错误的因为他没有eat 它看起来不像animal 所以不属于animal类型
鸭式辨型来自于:"像鸭子一样走路并且嘎嘎叫的就叫鸭子。"假设有个基类包含三个方法, class duck(object): def run() pass def swim(): pass def walk(): pass 有一个方法依赖这个类。 def testXX(duck): pass 当你真正调用此类的时候你不用管testXX是不是duck或者他的子类,只要这个对象具有run,swim,walk三个方法就认为这个对象是duck类,就可以让他执行,所以方法testXX(duck)实现的时候只需要检查duck是否具有这三个方法就可以了。 def testXX(duck):
#此处检查duck是否具有相应run,swim,walk方法
bol = checkArgsHasMethodSwimWalAndwalk()
if bol:
return xx
else throw TypeError()
这个就是鸭式辩型的最初理解,这里的意思是 run_twice 也遵循鸭式辩型,不会管实际的类是否是Animal的对象或者它的子类的对象,只要具有run方法,run_twice就能正确执行。 鸭式变形、猴子补丁、map、reduce 这些在很多语言中都有。 廖老师时不时的会提到设计原则,设计原则是软件开发的指导思想比如开闭原则,里氏代换原则,最少知识原则,依赖倒转原则,单一职责原则,接口隔离原则。以及在此基础上开发出的设计模式都最终为一个中心思想服务----代码复用。而继承及函数是除了复制粘帖修改外最最最基础的代码复用。
这样理解: run_twice使用到了run方法, 动态语言是:无论是否来自同一个继承(同一类型),只要含有run方法的类都能被 run_twice(animal)调用,实现run_twice(animal)方法。 静态语言:只能是同一个继承(同一类型),才能被run_twice(animal)调用,实现run_twice(animal)方法。
- 1
天才的芭比
没看懂,能调用run方法的对象不都是类本身就定义了run方法么,那下面的话是什么意思?