TypeError: Ошибка при вызове баз метаклассов, у класса нового стиля не может быть только классических баз - PullRequest
10 голосов
/ 13 марта 2012

Коллекция классов, определенных как:

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 Ответ

17 голосов
/ 13 марта 2012

Проблема в строке

class A():

Это должно быть:

class A(object):

Таким образом, вы делаете A новым классом стиля.Пустые парены не имеют никакого смысла, и тем не менее я продолжаю видеть их в стеке и везде.Почему, о, почему?

...