调用抽象超类错误的@classmethod——Python



我试图覆盖下面代码中的类方法,但收到以下错误

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

最新更新