TypeError: Errore durante la chiamata delle basi del metaclass Una classe di nuova classe non può avere solo basi classiche

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

Domanda

Una raccolta di classi definite come:

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 esegui, fornisce questo errore:

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

Ho bisogno del metaclass (penso) ad avere una rappresentazione di stringa nota di B nel mio codice.La ragione per avere questo è accanto al punto, ma ti aiuterà notevolmente con gli aggiornamenti futuri.

Assumendo che ho bisogno di c per essere il metaclass di B e B sarà una sottoclasse di A può qualcuno dirmi cosa sta andando male qui e come potrei cambiare ciò che sto facendo per rimuovere l'errore?

È stato utile?

Soluzione

Il problema è la linea

class A():
.

dovrebbe essere:

class A(object):
.

In questo modo, fai una classe di un nuovo stile.Le parente vuote non hanno alcun senso, e ancora, continuo a vederli su Stackoverflow e ovunque.Perché, oh perché?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top