问题
Topic source楼上的楼上表述的有误吧,写在外面实际上只体现了鸭子特性,继承是要继承父类的所有方法的,鸭子特性只是当前类中正好有一个方法和某个类一样而已,并不是说明它还继承了那个类的其他所有方法,你写个代码测试一下就知道鸭子类型和继承的区别,不能误导别人哦
def run_twice(animal): animal.run() animal.run()
老师这节讲鸭子特性的重点我的觉得是:
Python的参数不必定义类型(与Java等静态语言的不同点)
run_twice函数的参数animal没有类型限制,如果是用Java写,这个函数会变成:
public void run_twice(Animal animal) {
////
}
Python的鸭子特点就是指的参数animal可接收一切类型的实例,只要这个实例有run方法。
个人理解,欢迎指正。
为什么是def run_twice(animal) 而不是 def run_twice(Animal) 我搞不懂
+1
还有一个问题为什么里面是animal而不是self了o(╥﹏╥)o
run_twice()写在类内就是继承,只有Animal和Animal的子类可以运行run_twice(),由于Timer类不是Animal的子类,无法运行run_twice()方法。 run_twice()写在类外,由于动态语言的鸭子特性,只要类中有run()方法都可以正常运行run_twice()方法。
一转身我遇见你
赞同!