TypeError: Errore durante la chiamata delle basi del metaclass Una classe di nuova classe non può avere solo basi classiche
-
12-12-2019 - |
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?
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