Konwertuj obiekt typu Pythona na łańcuch

152

Zastanawiam się, jak przekonwertować obiekt „typu” w języku Python na ciąg znaków przy użyciu funkcji refleksyjnych języka Python.

Na przykład chciałbym wydrukować typ obiektu

print "My type is " + type(someObject) # (which obviously doesn't work like this)
Rehno Lindeque
źródło
1
Jaki jest według Ciebie „typ” obiektu? A co nie działa w tym, co opublikowałeś?
Falmarri
Przepraszamy, typ wydruku (someObject) faktycznie działa :)
Rehno Lindeque

Odpowiedzi:

223
print type(someObject).__name__

Jeśli to ci nie odpowiada, użyj tego:

print some_instance.__class__.__name__

Przykład:

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

Wydaje się również, że istnieją różnice w type()przypadku używania klas nowego stylu i starego stylu (czyli dziedziczenia z object). W przypadku klasy w nowym stylu type(someObject).__name__zwraca nazwę, a w przypadku klas w starym stylu zwraca instance.

Gabi Purcaru
źródło
3
Wykonanie print(type(someObject))spowoduje wydrukowanie pełnej nazwy (tj.
Łącznie
7
>>> class A(object): pass

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

co masz na myśli, mówiąc o konwersji na ciąg? możesz zdefiniować własne metody repr i 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

lub nie wiem ... proszę dodać wyjaśnienia;)

Mrówka
źródło
Przy okazji. Myślę, że Twoja pierwotna odpowiedź miała str (typ (someObject)), co również było pomocne
Rehno Lindeque,
4
print("My type is %s" % type(someObject)) # the type in python

lub...

print("My type is %s" % type(someObject).__name__) # the object's type (the class you defined)
Rybak
źródło
2

Używanie str ()

 typeOfOneAsString=str(type(1))
Brian C.
źródło
1

Jeśli chcesz użyć str()i niestandardowej metody str . Działa to również w przypadku 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'
człowiek psujący zabawę
źródło