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

时间:2014-10-27 17:13:43

标签: 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)

3 个答案:

答案 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