Erro de tipo:Erro ao chamar as bases da metaclasse, uma classe de novo estilo não pode ter apenas bases clássicas

StackOverflow https://stackoverflow.com//questions/9677163

Pergunta

Uma coleção de classes definidas como:

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')

Quando executado, dá este erro:

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

Preciso que a metaclasse (eu acho) tenha uma representação de string conhecida de B em meu código.A razão para isso não vem ao caso, mas ajudará muito em atualizações futuras.

Então, supondo que eu precise que C seja a metaclasse de B e B será uma subclasse de A, alguém pode me dizer o que está errado aqui e como posso mudar o que estou fazendo para remover o erro?

Foi útil?

Solução

O problema é a linha

class A():

Deveria ser:

class A(object):

Dessa forma, você faz de A uma nova classe de estilo.Os parênteses vazios não fazem sentido algum e, ainda assim, continuo vendo-os no stackoverflow e em todos os lugares.Por que oh por que?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top