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)

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.


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;)


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)


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'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.