Die Python-Funktion dir() liefert eine alphabetisch sortierte Liste der Namen, die einem Objekt zugeordnet sind — Attribute, Methoden, Klassenvariablen und mehr. Ohne Argument zeigt dir() alle Namen im aktuellen lokalen Scope. dir() ist eines der wichtigsten Werkzeuge für Introspection und interaktive Erkundung von Modulen, Klassen oder fremden Bibliotheken.

Einleitung

Wer mit einer neuen Bibliothek, einem unbekannten Objekt oder einer komplexen Klasse arbeitet, weiß oft nicht, welche Methoden zur Verfügung stehen. dir() schafft hier sofort Übersicht: Statt in der Dokumentation zu suchen, lässt sich das Objekt direkt im REPL „auseinandernehmen".

dir() ruft intern die Methode __dir__() des Objekts auf. Klassen, Module und die meisten Builtin-Typen implementieren das sinnvoll, Custom-Klassen können __dir__() überschreiben.

Syntax

Python Syntax
dir()           # Namen im aktuellen lokalen Scope
dir(object)     # Attribute und Methoden des Objekts
Parameter
object

Ein beliebiges Python-Objekt: Modul, Klasse, Instanz, Funktion, Builtin-Typ. Kann weggelassen werden.

Rückgabewert

Eine alphabetisch sortierte list[str] mit allen Namen, die zum Objekt gehören. Ohne Argument: alle Namen im aktuellen lokalen Scope (lokale Variablen, importierte Module, Funktionen, Klassen).

Beispiele

Methoden eines Strings

Python Beispiel
# Alle dunder-Methoden ausfiltern für mehr Übersicht
methods = [m for m in dir("Hallo") if not m.startswith("_")]
print(methods)
Output
['capitalize', 'casefold', 'center', 'count', 'encode', ...]

Inhalt eines Moduls

Python Beispiel
import math
print([n for n in dir(math) if not n.startswith("_")][:8])
Output
['acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt']

Aktueller Scope ohne Argument

Python Beispiel
x = 1
y = "hallo"
def func(): pass
print([n for n in dir() if not n.startswith("_")])
Output
['func', 'x', 'y']

Klassen-Inspection

Python Beispiel
class Car:
    color = "rot"
    def fahren(self): pass

print([n for n in dir(Car) if not n.startswith("_")])
Output
['fahren', 'color']

Praktische Beispiele

Eigene __dir__()-Methode definieren

Python Beispiel
class DynamicAttrs:
    def __init__(self):
        self._daten = {"name": "Michael", "alter": 34}

    def __getattr__(self, name):
        if name in self._daten:
            return self._daten[name]
        raise AttributeError(name)

    def __dir__(self):
        # Dynamische Attribute mit aufnehmen
        return list(super().__dir__()) + list(self._daten)

obj = DynamicAttrs()
print([n for n in dir(obj) if not n.startswith("_")])
Output
['alter', 'name']

Methoden mit bestimmtem Namens-Pattern finden

Python Beispiel
# Alle "is_*"-Methoden eines Strings
s = "Hallo"
is_methoden = [m for m in dir(s) if m.startswith("is")]
print(is_methoden[:5])
Output
['isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit']

Diff zwischen zwei Objekten

Python Beispiel
# Was hat eine Liste, was ein Tupel nicht hat?
unique = set(dir(list)) - set(dir(tuple))
print(sorted(m for m in unique if not m.startswith("_")))
Output
['append', 'clear', 'copy', 'extend', 'insert', 'pop', 'remove', 'reverse', 'sort']

Praktische Hinweise

  • REPL-Tipp: dir(obj) ist der schnellste Weg, ein neues Objekt zu erkunden — gefolgt von help(obj.method) für Details.
  • Filterung: Dunder-Methoden (__name__) füllen die Liste — meist mit [m for m in dir(x) if not m.startswith("_")] filtern.
  • Custom __dir__: Klassen können __dir__() überschreiben, um die Ausgabe gezielt zu steuern (z. B. dynamische Attribute aus __getattr__ zu listen).
  • Verwandte Funktionen: vars() zeigt das __dict__, getattr()/hasattr() greifen einzeln zu, inspect-Modul liefert tiefere Introspection.
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht