为什么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
,也许这可以预测语言中的这些添加,并且是向前兼容的。