TypeError:调用元类基时出错,新式类不能只有经典基

Posted

技术标签:

【中文标题】TypeError:调用元类基时出错,新式类不能只有经典基【英文标题】:TypeError: Error when calling the metaclass bases a new-style class can't have only classic bases 【发布时间】:2012-03-29 10:45:39 【问题描述】:

类的集合定义为:

class A():
    @staticmethod
    def call():
        print('a')

class C(type):
    def __repr__(self):
        return 'somename'

class B(A):
    __metaclass__ = C

    @staticmethod
    def call():
        print('b')

    def boundcall(self):
        print('bound')

运行时报错:

TypeError: Error when calling the metaclass bases
    a new-style class can't have only classic bases

我需要元类(我认为)在我的代码中具有 B 的已知字符串表示。这样做的原因是无关紧要的,但它将极大地帮助未来的更新。

所以假设我需要 C 作为 B 的元类,而 B 将是 A 的子类,有人可以告诉我这里出了什么问题以及我可以如何改变我正在做的事情来消除错误吗?

【问题讨论】:

【参考方案1】:

问题是线

class A():

应该是:

class A(object):

这样,你就可以让 A 成为一个新的样式类。空括号没有任何意义,而且,我仍然在 *** 和任何地方看到它们。为什么,哦,为什么?

【讨论】:

【参考方案2】:

就我而言,我尝试降低软件包的版本。成功了!

第二次试用,由于版本问题,这在 python 2 中有。将您的代码升级到 python3。它有效。

【讨论】:

以上是关于TypeError:调用元类基时出错,新式类不能只有经典基的主要内容,如果未能解决你的问题,请参考以下文章

Django:调用元类库时出错

TypeError:调用元类基“函数”对象时出错不可迭代

旧式类、新式类和元类

Python之路:描述符,类装饰器,元类

TypeError:元类冲突:派生类的元类

调用元类基础函数()参数时出错 1 必须是代码而不是 str