Convierta un objeto 'tipo' de python en una cadena

152

Me pregunto cómo convertir un objeto 'tipo' de python en una cadena usando las capacidades reflexivas de python.

Por ejemplo, me gustaría imprimir el tipo de un objeto

print "My type is " + type(someObject) # (which obviously doesn't work like this)
Rehno Lindeque
fuente
1
¿Cuál considera que es el "tipo" de un objeto? ¿Y qué no funciona sobre lo que publicaste?
Falmarri
Disculpas, el tipo de impresión (someObject) realmente funciona :)
Rehno Lindeque

Respuestas:

223
print type(someObject).__name__

Si eso no te conviene, usa esto:

print some_instance.__class__.__name__

Ejemplo:

class A:
    pass
print type(A())
# prints <type 'instance'>
print A().__class__.__name__
# prints A

Además, parece que hay diferencias con el type()uso de clases de estilo nuevo frente al estilo antiguo (es decir, herencia de object). Para una clase de estilo nuevo, type(someObject).__name__devuelve el nombre, y para las clases de estilo antiguo, devuelve instance.

Gabi Purcaru
fuente
3
Al hacerlo, print(type(someObject))se imprimirá el nombre completo (es decir, incluido el paquete)
MageWind
7
>>> class A(object): pass

>>> e = A()
>>> e
<__main__.A object at 0xb6d464ec>
>>> print type(e)
<class '__main__.A'>
>>> print type(e).__name__
A
>>> 

¿Qué quieres decir con convertir en una cadena? puede definir sus propios métodos repr y str _:

>>> class A(object):
    def __repr__(self):
        return 'hei, i am A or B or whatever'

>>> e = A()
>>> e
hei, i am A or B or whatever
>>> str(e)
hei, i am A or B or whatever

o no lo sé ... por favor agregue explicaciones;)

Hormiga
fuente
Por cierto. Creo que su respuesta original tenía str (type (someObject)) que también fue útil
Rehno Lindeque
4
print("My type is %s" % type(someObject)) # the type in python

o...

print("My type is %s" % type(someObject).__name__) # the object's type (the class you defined)
Pescador
fuente
2

Usando str ()

 typeOfOneAsString=str(type(1))
Brian C.
fuente
1

En caso de que desee utilizar str()un método str personalizado . Esto también funciona para repr.

class TypeProxy:
    def __init__(self, _type):
        self._type = _type

    def __call__(self, *args, **kwargs):
        return self._type(*args, **kwargs)

    def __str__(self):
        return self._type.__name__

    def __repr__(self):
        return "TypeProxy(%s)" % (repr(self._type),)

>>> str(TypeProxy(str))
'str'
>>> str(TypeProxy(type("")))
'str'
aguafiestas
fuente