2012-03-13 7 views
10

una colección de clases definida como:TypeError: Error al llamar a las bases MetaClass una clase de nuevo estilo no puede tener sólo las bases clásicas

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

Cuando se ejecuta, da este error:

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

Necesito la metaclase (creo) para tener una representación de cadena conocida de B en mi código. La razón de tener eso no viene al caso, pero será de gran ayuda con futuras actualizaciones.

Suponiendo que necesito que C sea la metaclase de B y B será una subclase de A ¿alguien me puede decir qué está mal aquí y cómo podría cambiar lo que estoy haciendo para eliminar el error?

Respuesta

16

El problema es la línea

class A(): 

Debería ser:

class A(object): 

De esta manera, se hace una una nueva clase de estilo. Los parens vacíos no tienen ningún sentido, y aún así, sigo viéndolos en stackoverflow y en todas partes. ¿Porque Oh porque?

Cuestiones relacionadas