Discuss / Python / none

yun___雲

#1 Created at ... [Delete] [Delete and Lock User]

所有有效的类追溯源泉都是继承自object,就是大家都有一个祖宗,这么看来最后那个动态语言所谓的不要求严格继承关系是一句废话啊,其实大家都是有关系的啊。

啊K_I_

#2 Created at ... [Delete] [Delete and Lock User]

感觉说的有道理

是不是动态就是继承自一个object

而静态语言不是

不是这样的。 java所有的对象也都是继承自object。 这里和静态类型的区别,已经说明白了。动态类型只要求有同一个方法名。而静态类型要求是同一个父类。

兄弟,JAVA(静态语言)的继承不仅仅是继承参数和方法,还继承了血统(类型),如果一个JAVA函数只接受animal类型的参数,那么就算你写一个dog类有animal的所有参数和方法也不能作为这个函数的参数。 但是python就不一样,动态语言的特性决定了你只要具备这个函数所使用的方法,就可以作为这个函数的参数,所以继承是“不必要的”,因为它只要看起来像animal就行了,可以没有他的“血统”。 所以python的“多态”其实好像也没什么用,应为新增的animal子类可以用run_twice的本质原因不是因为子类也是animal,而是因为子类由于继承一定拥有run方法。

Confidendure

#5 Created at ... [Delete] [Delete and Lock User]

关于前半句继承object类的问题,请注意2和3的区别。

class Animal:
    pass

上述代码在3中是默认继承了object类,属于new-style class。在2中是需要明确继承关系的,所以写成

class Animal(object):
    pass

要不然就属于classic class了。


  • 1

Reply