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)
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)
Risposte:
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
.
print(type(someObject))
verrà stampato il nome completo (es.
>>> 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;)
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'