我试图覆盖下面代码中的类方法,但收到以下错误
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)
super
仅适用于新型类(在2.x系列中,这意味着继承自object
),但A
是一个旧式类。
要修复此问题,请将class A():
替换为class A(object):
。
super是一个对象,而不是类。由于test显式地是一个类方法,所以您需要使用super的类(在本例中为"a")来调用它。
尝试将最后一行替换为return A.测试(数据)
A
是一个旧式类(它不是从object
继承的),但super
只能与新式类一起使用。只需修复A
:
class A(object):
@classmethod
def test(cls, data):
pass