Converter um objeto 'type' em python em uma string


152

Eu estou querendo saber como converter um objeto 'tipo' python em uma string usando os recursos reflexivos do python.

Por exemplo, eu gostaria de imprimir o tipo de um objeto

print "My type is " + type(someObject) # (which obviously doesn't work like this)

1
O que você considera o "tipo" de um objeto? E o que não funciona no que você postou?
Falmarri 15/02

Desculpas, tipo de impressão (someObject) realmente funciona :)
Rehno Lindeque

Respostas:


223
print type(someObject).__name__

Se isso não combina com você, use o seguinte:

print some_instance.__class__.__name__

Exemplo:

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

Além disso, parece haver diferenças com o type()uso de classes de novo estilo e de estilo antigo (ou seja, herança de object). Para uma classe de novo estilo, type(someObject).__name__retorna o nome e, para classes de estilo antigo, retorna instance.


3
Fazendo print(type(someObject))irá imprimir o nome completo (ou seja, incluindo o pacote.)
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
>>> 

o que você quer dizer com converter em uma string? você pode definir seus próprios métodos repr e 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

ou eu não sei ... por favor, adicione explicações;)


Btw. Eu acho que a sua resposta original tinha str (tipo (someObject)), que também foi útil
Rehno Lindeque

4
print("My type is %s" % type(someObject)) # the type in python

ou...

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


1

Caso você queira usar str()um método str personalizado . Isso também 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'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.