Konvertieren Sie ein Python-Typobjekt in eine Zeichenfolge

152

Ich frage mich, wie man ein Python-Objekt mithilfe der Reflexionsfunktionen von Python in eine Zeichenfolge konvertiert.

Zum Beispiel möchte ich den Typ eines Objekts drucken

print "My type is " + type(someObject) # (which obviously doesn't work like this)
Rehno Lindeque
quelle
1
Was ist für Sie der "Typ" eines Objekts? Und was funktioniert nicht an dem, was du gepostet hast?
Falmarri
Entschuldigung, Drucktyp (someObject) funktioniert tatsächlich :)
Rehno Lindeque

Antworten:

223
print type(someObject).__name__

Wenn das nicht zu Ihnen passt, verwenden Sie Folgendes:

print some_instance.__class__.__name__

Beispiel:

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

Es scheint auch Unterschiede zwischen der type()Verwendung von Klassen im neuen Stil und der Verwendung im alten Stil (dh der Vererbung von object) zu geben. Gibt für eine Klasse neuen Stils type(someObject).__name__den Namen und für Klassen alten Stils den Namen zurück instance.

Gabi Purcaru
quelle
3
Dadurch print(type(someObject))wird der vollständige Name (dh einschließlich des Pakets)
gedruckt
7
>>> class A(object): pass

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

Was meinst du mit in einen String konvertieren? Sie können Ihre eigenen repr- und str _ -Methoden definieren:

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

oder ich weiß nicht..bitte füge Erklärungen hinzu;)

Ameise
quelle
Übrigens. Ich denke, Ihre ursprüngliche Antwort hatte str (Typ (someObject)), was auch hilfreich war
Rehno Lindeque
4
print("My type is %s" % type(someObject)) # the type in python

oder...

print("My type is %s" % type(someObject).__name__) # the object's type (the class you defined)
Fischer
quelle
2

Mit str ()

 typeOfOneAsString=str(type(1))
Brian C.
quelle
1

Falls Sie str()eine benutzerdefinierte str- Methode verwenden möchten . Dies funktioniert auch für 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
quelle