HOWTO · Python

Variablentyp in Python prüfen

Erfahren Sie, wie Sie den Typ eines Werts mit den Python-Funktionen type() und isinstance() prüfen.

Auf dieser Seite

Mit type(value) lässt sich der Typ eines Werts anzeigen. Mit isinstance(value, SomeType) können Sie prüfen, ob er zu einem Typ gehört, auch zu einer Unterklasse. Python-Variablen sind Namen, die an Objekte gebunden sind. Deshalb prüfen Sie den Wert und keinen zuvor deklarierten Variablentyp.

Variablen und ihre Typen in Python

Ein Python-Name verweist auf ein Objekt, und dieses Objekt hat einen Typ. Bei einer Zuweisung wird der Name an das Objekt gebunden; den Typ des Namens müssen Sie nicht vorher deklarieren. Zum Beispiel sind 42, 3.5, "hello", True und [1, 2] Werte der Typen int, float, str, bool beziehungsweise list. Derselbe Name kann später auf ein Objekt eines anderen Typs verweisen.

Den Typ einer Variablen in Python prüfen

Zur schnellen Prüfung übergeben Sie den Wert an type(); wenn Ihr Code einen booleschen Typentest benötigt, verwenden Sie isinstance(). Das folgende Beispiel zeigt beide Ansätze anhand einer Ganzzahl und einer Zeichenkette. Es ist in sich abgeschlossen und kann mit Python ausgeführt werden, um die ausgegebenen Ergebnisse zu sehen.

count = 50
label = "Ada"

print(type(count))
print(type(label))
print(isinstance(count, int))
print(isinstance(label, int))
<class 'int'>
<class 'str'>
True
False

Mit der Funktion type() den Typ einer Variablen in Python prüfen

Die eingebaute Funktion type() gibt das Typobjekt des übergebenen Werts zurück. Bei der Ausgabe erscheinen häufige eingebaute Typen beispielsweise als <class 'int'>, <class 'float'> und <class 'str'>. Das ist nützlich, um einen Wert beim Debuggen zu untersuchen oder das Verhalten anhand seines genauen Typs auszuwählen.

Zum Beispiel ist type(50) gleich int, type(10.5) gleich float und type("Ada") gleich str. Ein Aufruf von type() zeigt an, welchen Typ ein Objekt hat; er wandelt das Objekt nicht in einen anderen Typ um.

Mit der Funktion isinstance() den Typ einer Variablen in Python prüfen

Mit isinstance(value, classinfo) erhalten Sie True oder False dafür, ob value eine Instanz der angegebenen Klasse oder Klassen ist. Anders als beim direkten Vergleich des Ergebnisses von type(value) mit einer Klasse berücksichtigt isinstance() auch Unterklassen. Daher eignet sich die Funktion für Prüfungen, bei denen eine Klasse und ihre Unterklassen akzeptiert werden sollen.

class Animal:
    pass

class Dog(Animal):
    pass

pet = Dog()
print(isinstance(pet, Dog))
print(isinstance(pet, Animal))
print(type(pet) is Dog)
True
True
True

In diesem Beispiel sind beide isinstance()-Prüfungen wahr, weil Dog von Animal abgeleitet ist. Der Vergleich auf den exakten Typ ist wahr, weil pet als Dog erstellt wurde. Verwenden Sie type(value) is SomeType nur, wenn ausdrücklich eine Übereinstimmung mit genau diesem Typ erforderlich ist. Die Typprüfung und die Instanzprüfung ändern den Typ eines Werts nicht.

Dieser Unterschied ist wichtig, wenn eine Funktion mit einer Basisklasse und den daraus abgeleiteten spezialisierten Objekten arbeiten soll. Code, der ein Animal akzeptiert, kann oft über dieselbe Schnittstelle auch ein Dog verarbeiten; isinstance(pet, Animal) drückt diesen Vertrag aus. Eine exakte Prüfung wie type(pet) is Animal würde ein Dog ablehnen, obwohl es von Animal erbt. Verwenden Sie Prüfungen auf den exakten Typ, wenn Unterklassen anders behandelt werden müssen oder ausdrücklich nicht unterstützt werden. Für gewöhnlichen polymorphen Code ist die unterklassenbewusste Prüfung meist flexibler.