Die Python-Funktion isinstance(obj, classinfo) prüft, ob ein Objekt eine Instanz einer Klasse oder einer ihrer Subklassen ist. Im Gegensatz zu type(obj) is Cls berücksichtigt isinstance() die Vererbungshierarchie und akzeptiert auch ein Tupel von Typen als zweites Argument. Das macht sie zur idiomatischen Wahl für Typprüfungen in Python.

Einleitung

isinstance() ist Pythons Standard-Werkzeug für explizite Typprüfungen. Sie unterscheidet sich in zwei wichtigen Punkten von type(obj) == Cls:

  1. Vererbung wird respektiert: Eine Instanz einer Subklasse zählt auch als Instanz der Oberklasse. isinstance(True, int)True, weil bool von int erbt.
  2. Mehrere Typen auf einmal: isinstance(x, (int, float)) prüft, ob x zu mindestens einem der Typen passt.

Außerdem versteht isinstance() Abstract Base Classes (ABCs) aus dem collections.abc-Modul. So lässt sich z. B. mit isinstance(obj, Iterable) abstrakt prüfen, ob ein Objekt ein Iterable ist — egal ob list, tuple, dict oder ein eigener Typ mit __iter__.

In modernem Python wird Typprüfung oft durch Type Hints und Tools wie mypy ersetzt. Zur Laufzeit bleibt isinstance() aber unverzichtbar — vor allem in API-Boundaries und bei Polymorphismus-Entscheidungen.

Syntax

Python Syntax
isinstance(object, classinfo)
Parameter
object

Beliebiges Python-Objekt.

classinfo

Eine Klasse, ein Typ — oder ein Tupel davon. Seit Python 3.10 auch eine Union mit | (z. B. int | float).

Rückgabewert

True, wenn das Objekt eine Instanz der angegebenen Klasse oder einer Subklasse ist. Sonst False.

Beispiele

Standard-Typprüfung

Python Beispiel
print(isinstance(42, int))
print(isinstance("hallo", str))
print(isinstance([1, 2, 3], list))
print(isinstance(3.14, int))
Output
True
True
True
False

Tupel von Typen

Python Beispiel
def is_number(x):
    return isinstance(x, (int, float, complex))

print(is_number(42))
print(is_number(3.14))
print(is_number("42"))
Output
True
True
False

Vererbung

Python Beispiel
class Animal: pass
class Dog(Animal): pass

bello = Dog()
print(isinstance(bello, Dog))
print(isinstance(bello, Animal))   # erbt von Animal
print(isinstance(True, int))      # bool erbt von int!
Output
True
True
True

ABCs aus collections.abc

Python Beispiel
from collections.abc import Iterable, Mapping

print(isinstance([1, 2], Iterable))
print(isinstance("text", Iterable))
print(isinstance({"a": 1}, Mapping))
print(isinstance(42, Iterable))
Output
True
True
True
False

Praktische Beispiele

Polymorphes Verhalten in Funktionen

Python Beispiel
def normalize(x):
    if isinstance(x, str):
        return x.strip().lower()
    if isinstance(x, (list, tuple)):
        return [normalize(item) for item in x]
    if isinstance(x, dict):
        return {k: normalize(v) for k, v in x.items()}
    return x

print(normalize({"name": "  ALICE  ", "tags": ["A", " B "]}))
Output
{'name': 'alice', 'tags': ['a', 'b']}

Bool von int unterscheiden (Edge-Case)

Python Beispiel
# bool erbt von int — manchmal will man das explizit ausschließen
def is_real_number(x):
    return isinstance(x, (int, float)) and not isinstance(x, bool)

print(is_real_number(42))
print(is_real_number(True))   # False
print(is_real_number(3.14))
Output
True
False
True

Union-Syntax (Python 3.10+)

Python Beispiel
# Statt Tupel auch mit | als Union schreibbar
def is_text_or_bytes(x):
    return isinstance(x, str | bytes)

print(is_text_or_bytes("hi"))
print(is_text_or_bytes(b"hi"))
print(is_text_or_bytes(42))
Output
True
True
False

Praktische Hinweise

  • Bevorzuge isinstance() über type(x) == Cls — letzteres ignoriert Vererbung und ist meist falsch.
  • Duck-Typing zuerst: In Python ist „kann es Methode X?" oft die bessere Frage als „ist es Typ Y?". try/except oder hasattr() sind häufig idiomatischer.
  • ABCs aus collections.abc ermöglichen abstrakte Checks (Iterable, Mapping, Sized, Sequence, ...).
  • Performance: isinstance() ist sehr schnell, aber im Hot-Path noch schneller mit type() (ohne Vererbungs-Check).
  • Verwandte Funktion: issubclass() prüft analog für Klassen statt Instanzen.
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht