Convertir un objet 'type' python en chaîne

152

Je me demande comment convertir un objet de type python en une chaîne en utilisant les capacités de réflexion de python.

Par exemple, je voudrais imprimer le type d'un objet

print "My type is " + type(someObject) # (which obviously doesn't work like this)
Rehno Lindeque
la source
1
Que considérez-vous comme le "type" d'un objet? Et qu'est-ce qui ne fonctionne pas dans ce que vous avez publié?
Falmarri
Toutes mes excuses, le type d'impression (someObject) fonctionne réellement :)
Rehno Lindeque

Réponses:

223
print type(someObject).__name__

Si cela ne vous convient pas, utilisez ceci:

print some_instance.__class__.__name__

Exemple:

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

En outre, il semble qu'il existe des différences type()lors de l'utilisation de classes de style nouveau par rapport à l'ancien (c'est-à-dire l'héritage de object). Pour une classe de style nouveau, type(someObject).__name__renvoie le nom, et pour les classes de style ancien, il renvoie instance.

Gabi Purcaru
la source
3
Faire print(type(someObject))affichera le nom complet (c.-à-d.
Y
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'entendez-vous par convertir en chaîne? vous pouvez définir vos propres méthodes repr et 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 je ne sais pas ... veuillez ajouter des explications;)

Fourmi
la source
Btw. Je pense que votre réponse originale avait str (type (someObject)) qui était également utile
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)
Pêcheur
la source
2

Utiliser str ()

 typeOfOneAsString=str(type(1))
Brian C.
la source
1

Au cas où vous souhaiteriez utiliser str()une méthode str personnalisée . Cela fonctionne également pour 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'
killjoy
la source