2012-03-13 7 views
10

una collezione di classi definite come:TypeError: errore quando si chiama le basi metaclasse una classe di nuovo stile non può avere solo basi classiche

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 eseguito, dà questo errore:

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

Ho bisogno del metaclass (credo) per avere una rappresentazione di stringa nota di B nel mio codice. Motivo per avere questo è accanto al punto, ma sarà di grande aiuto con gli aggiornamenti futuri.

Quindi supponendo che ho bisogno che C sia il metaclasse di B e B sarà una sottoclasse di A qualcuno può dirmi cosa sta andando storto qui e come posso cambiare quello che sto facendo per rimuovere l'errore?

risposta

16

Il problema è la linea

class A(): 

Dovrebbe essere:

class A(object): 

In questo modo, si effettua una una nuova classe di stile. I parens vuoti non hanno alcun senso, e continuo a vederli sullo stackoverflow e ovunque. Perché, oh perché?