Converti un oggetto 'type' in una stringa


152

Mi chiedo come convertire un oggetto 'type' in una stringa usando le capacità riflettenti di Python.

Ad esempio, vorrei stampare il tipo di un oggetto

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

1
Quale consideri il "tipo" di un oggetto? E cosa non funziona di ciò che hai pubblicato?
Falmarri,

Scuse, il tipo di stampa (someObject) funziona davvero :)
Rehno Lindeque,

Risposte:


223
print type(someObject).__name__

Se non ti va bene, usa questo:

print some_instance.__class__.__name__

Esempio:

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

Inoltre, sembra che ci siano differenze rispetto type()all'uso di classi di nuovo stile rispetto a quelle di vecchio stile (ovvero eredità da object). Per una classe di nuovo stile, type(someObject).__name__restituisce il nome e per le classi di vecchio stile restituisce instance.


3
In questo modo print(type(someObject))verrà stampato il nome completo (es.
Incluso

7
>>> class A(object): pass

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

cosa intendi per conversione in una stringa? puoi definire i tuoi metodi 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

o non lo so ... si prega di aggiungere spiegazioni;)


Btw. Penso che la tua risposta originale avesse str (tipo (someObject)) che è stato anche utile
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)


1

Nel caso in cui si desidera utilizzare str()e un metodo str personalizzato . Questo funziona anche per 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'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.