为什么Python中的基类需要扩展对象?

为什么Python中的基类需要扩展对象?,python,inheritance,Python,Inheritance,如果我想使用super # Without extending object, this code will fail with # TypeError: must be type, not classobj class A(object): def __init__(self): print "Called A.__init__" class AChild(A): def __init__(self): super(AChild, self).__init__()

如果我想使用
super

# Without extending object, this code will fail with 
# TypeError: must be type, not classobj
class A(object):
  def __init__(self):
    print "Called A.__init__"

class AChild(A):
  def __init__(self):
    super(AChild, self).__init__()
    print "Called AChild.__init__"

AChild()

这与预期的一样有效,但是如果删除
对象
,它会抛出前面提到的异常。我正在使用Python 2.7.8。请随意将我链接到任何相关的问题,但是我没有通过快速搜索找到一个好的答案,因为通过扩展
对象
,您正在使用新的样式类,这些样式类是支持
超级
使用所必需的,超级是在Python中引入新样式类的同时添加的

根据本文中的信息,旧式类有一个简单的深度优先方法解析顺序,因此不需要这个函数,这可能就是它不需要的原因
那就不包括在内了。但是,在添加多重继承时,
super
现在是调用超类的推荐方式,因为MRO更复杂。

而且为了增加混淆,Python3不再需要
(对象)
-因为所有类现在都是“新样式”。@hpaulj这一点很好,但没有那么令人困惑,因为如果您将其子类化,它仍然可以工作。
super
不仅仅是访问超类的一种新方式。它是为了实现协作继承,这意味着层次结构中使用
super
的所有类都必须编写为支持在层次结构中的任何ancester/类中使用
super
。在使用
super
之前,理解它的含义是很重要的。@chepner我刚才说的是为什么以前没有一个与旧式类等价的
super
,也许这可以预测语言中的这些添加,并且是向前兼容的。