在Python 2.5中,以下代码引发TypeError:>>> class X: def a(self): print "a">>> class Y(X): def a(self): super(Y,self).a() print "b">>> c = Y()>>> c.a()Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in aTypeError: super() argument 1 must be type, not classobj如果我更换class X用class X(object),它会奏效。这有什么解释?
3 回答
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
原因是super()只能在新式类上运行,这在2.x系列中意味着从object:
>>> class X(object):
def a(self):
print 'a'
>>> class Y(X):
def a(self):
super(Y, self).a()
print 'b'
>>> c = Y()
>>> c.a()
a
b
RISEBY
TA贡献1856条经验 获得超5个赞
另外,除非必须,否则不要使用super()。您可能会怀疑,使用新型类不是通用的“正确的事情”。
有时,您可能期望多重继承,并且可能会想要多重继承,但是在您知道MRO的繁琐细节之前,最好不要去管它,并坚持:
X.a(self)
添加回答
举报
0/150
提交
取消