Python中的“A类:”和“A类(对象):”有什么区别?

时间:2010-12-27 00:08:47

标签: python class inheritance python-3.x

之间有什么区别
class A:
    pass

class B(object):
    pass

?出于某种原因,在方法中我不能使用super(A, self),但super(B, self)效果很好。我想Py3k中没有这样的特性:)

4 个答案:

答案 0 :(得分:6)

在2.x中,后者创建new-style class。在3.x中,两者都具有相同的效果,因为旧式类已被删除。

答案 1 :(得分:6)

第一个是旧式班。第二个是新式课程。有关差异的详细讨论,请参阅http://docs.python.org/tutorial/classes.html#multiple-inheritancesuper()仅适用于新式类。 http://docs.python.org/library/functions.html#super

答案 2 :(得分:1)

B类是新的样式类http://www.python.org/doc/newstyle/

答案 3 :(得分:1)

如上所述,第二种情况创建了一种新式的类,而第一种情况创建了一种旧式的类(不推荐使用!)。

为了消除旧样式的限制而创建的新样式类:旧样式类无法从内置类型继承。 对于新式类,您可以从内置类型继承;事实上,所有内置类型都来自“对象”:

>>> list.__mro__
(<type 'list'>, <type 'object'>)