我正在尝试覆盖一个类方法,如下面的代码所示,但是收到以下错误
TypeError: must be type, not classobj
为什么会发生这种情况,我该如何解决?
class A(object):
@classmethod
def test(cls, data):
pass
class B(A):
@classmethod
def test(cls, data):
pass
class C(B):
@classmethod
def test(cls, data):
# do something to data
return super(B, cls).test(data)
答案 0 :(得分:0)
super是一个对象,而不是一个类。由于test显式是一个类方法,你需要使用super类调用它(在这种情况下" A")。
尝试用最后一行替换 返回A.test(数据)
答案 1 :(得分:0)
super
仅适用于新式类(在2.x系列中表示继承自object
),但A
是旧式类。
要解决此问题,请将class A():
替换为class A(object):
。
答案 2 :(得分:0)
A
是一个旧式类(它不会从object
继承),但super
只能 与新式类一起使用。只需修正A
:
class A(object):
@classmethod
def test(cls, data):
pass