烦请老师看看我以下的理解是否对:
一、有关鸭子类型与魔法方法:
1、我们自定义任何的class(不使用“类”,以免与“类型”混乱)一般情况下其实与list、set都拥有一样基类object,那么我自定义的类之间,甚至与python中list、set等内置类的区别往往就在于彼此用了何种魔法函数,因为魔法函数会使得所在的class(类)拥有某种特性,而我们往往根据其拥有的特性将class(类)分为不同的“类型”,如:数值、迭代类型、序列类型等等。而这个用于分类的“类型”是否用“数据类型”这个词代替会更好,更不容易搞混乱?
2、由于魔法方法能够使得一个class(类)拥有某种特性从而变成为某种数据类型,所以class(类)的名称是不重要的,重要的是这个class(类)有何种特性,从而属于何种数据类型。
3、老师你鸭子类型中举的for循环调用同一方法的例子中并没有使用魔法方法,但其实也说明了只要某个对象拥有某个方法就可以被调用,我们更喜欢说某个类有duck方法(它有鸭的脖子),而不是因为它是鸭子类所以有duck方法。
终上所述,我理解的鸭子类型其实就是利用有什么特性,属于什么数据类型,有什么魔法函数来分类,来操作的思维,而不管这些class(类)或对象的名称叫什么。
二、多态:
由于本人不是计算机专业,只因为工作学习过vba与python,也不懂静态与动态语言的区别,我只知道我用vba的时候是其实就是写操作过程。我对python的不同class(类)的实例对象可以调用同一个方法觉得天经地义,完全不明白老师所说的java的类比方法重要的思维。
1、我猜想是不是java中自定义方法时形参需要事先定好数据类型,假如自定义一个A方法时形参明白地指定了是A类,那么运行A方法的时候传入的实参只可以是A类或A类的子类,不然会报错。但python重点不在往A参数传入什么参数,而是这个参数所拥有的特性是否在是A方法里面要调用的特性(数据类型)相一致。
三、鸭子类型和多态:
1、其实鸭子类型和多态是python的一个特点的不同面向的描述或这个特点的两种体现,这个特点是:python更看重数据类型以及其特性的操作而不是编程形式/格式,所以python拥有更高的灵活性。
老师,请问如上理解有没有问题?