2010-07-23 20 views
19

¿Es posible obtener el nombre de una subclase? Por ejemplo:¿Obtener el nombre de la subclase?

class Foo: 
    def bar(self): 
     print type(self) 

class SubFoo(Foo): 
    pass 

SubFoo().bar() 

imprimirá: < type 'instance' >

Busco una manera de conseguir "SubFoo".

Sé que puede hacer isinstance, pero no sé el nombre de la clase a priori, por lo que no funciona para mí.

+0

.. al menos, puede usar 'issubclass (SubFoo, Foo)' – mykhal

Respuesta

8
#!/usr/bin/python 
class Foo(object): 
    def bar(self): 
    print type(self) 

class SubFoo(Foo): 
    pass 

SubFoo().bar() 

subclases de object le da clases de nuevo estilo (que ya no son tan nuevos - ¡python 2.2!) Cada vez que quieras trabajar mucho con el atributo self obtendrás mucho más por tu dinero si subclases del objeto. Documentos de Python ... new style classes. Históricamente, Python dejó el viejo estilo Foo() para compatibilidad con versiones anteriores. Pero esto fue hace mucho tiempo. Ya no hay mucha razón para no subclasificar de un objeto.

+0

Y 'Foo()' tampoco funcionará en las versiones antiguas de Python. –

3

Funciona mucho mejor cuando utiliza clases de estilo nuevo.

class Foo(object): 
    .... 
13

puede utilizar

SubFoo().__class__.__name__ 

que podría ser fuera de tema, ya que le da un nombre de clase :)

+0

@ars no exactamente – mykhal

+0

¡Vaya, lo siento. Tienes razón, mi mal. – ars

1

SubFoo.__name__

Y los padres: [cls.__name__ for cls in SubFoo.__bases__]

Cuestiones relacionadas