1140 votos

Obtener el nombre de clase de un ejemplo en Python

¿Cómo puedo averiguar el nombre de la clase que crea una instancia de un objeto en Python si la función que yo estoy haciendo, esta es la clase base de que la clase de la instancia ha sido derivados?

Estaba pensando que tal vez el inspeccione el módulo podría haber ayudado a mí aquí, pero parece que no me dan lo que yo quiero. Y a falta de analizar el __class__ miembro, no estoy seguro de cómo llegar a esta información.

1503voto

sykora Puntos 30290

¿Has probado el __name__ atributo de la clase? ie x.__class__.__name__ le dará el nombre de la clase, que creo que es lo que quieres.

>>> import itertools
>>> x = itertools.count(0)
>>> x.__class__.__name__
'count'

EDIT: Si está utilizando el nuevo estilo de las clases (desde python 2.2, casi sin duda, el caso en este momento), usted debe llamar a la type() de función en lugar de:

>>> type(x).__name__
'count'

Ambos métodos funcionan también para los tipos integrados como int.

>>> (5).__class__.__name__
'int'
>>> type(5).__name__
'int'

313voto

truppo Puntos 10346

¿Desea que el nombre de la clase como una cadena?

instance.__class__.__name__

77voto

GHZ Puntos 936

tipo() ?

>>> class A(object):
...    def whoami(self):
...       print type(self).__name__
...
>>>
>>> class B(A):
...    pass
...
>>>
>>>
>>> o = B()
>>> o.whoami()
'B'
>>>

26voto

Prasath Puntos 93
type(instance).__name__ != instance.__class__.__name  #if class A is defined like
class A():
   ...

type(instance) == instance.__class__                  #if class A is defined like
class A(object):
  ...

Ejemplo:

>>> class aclass(object):
...   pass
...
>>> a = aclass()
>>> type(a)
<class '__main__.aclass'>
>>> a.__class__
<class '__main__.aclass'>
>>>
>>> type(a).__name__
'aclass'
>>>
>>> a.__class__.__name__
'aclass'
>>>


>>> class bclass():
...   pass
...
>>> b = bclass()
>>>
>>> type(b)
<type 'instance'>
>>> b.__class__
<class __main__.bclass at 0xb765047c>
>>> type(b).__name__
'instance'
>>>
>>> b.__class__.__name__
'bclass'
>>>

13voto

RyanN Puntos 346

Buena pregunta.

He aquí un sencillo ejemplo basado en GHZ que podría ayudar a alguien:

>>> class person(object):
        def init(self,name):
            self.name=name
        def info(self)
            print "My name is {0}, I am a {1}".format(self.name,self.__class__.__name__)
>>> bob = person(name='Robert')
>>> bob.info()
My name is Robert, I am a person

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: