HOWTO · Python

Objektattribute in Python ausgeben

Dieses Tutorial zeigt, wie Sie Attribute eines Objekts in Python auslesen und ausgeben.

Auf dieser Seite

Wenn Sie ein bekanntes Attribut ausgeben möchten, greifen Sie mit der Punktnotation darauf zu und übergeben seinen Wert an print(). Steht der Attributname in einer Zeichenkette, verwenden Sie getattr(). Gespeicherte Instanzattribute lassen sich über __dict__ oder – sofern verfügbar – vars() untersuchen. Mit dir() können Sie die Namen ermitteln, die Python für ein Objekt bereitstellt. Die Verfahren zeigen unterschiedliche Ansichten eines Objekts. Wählen Sie daher danach, ob Sie einen einzelnen Wert, die Attributzuordnung der Instanz oder eine umfassendere Namensliste benötigen.

Eine Klasse Person kann Klassenattribute definieren. Jedes Objekt kann zusätzlich eigene Instanzattribute speichern. Die folgenden Beispiele erzeugen eine Person mit Name, Alter und Wohnort.

Attribute eines Objekts in Python mit print und Attributzugriff ausgeben

Wenn der Attributname bekannt ist, ist der Zugriff mit der Punktnotation der direkteste Weg. Übergeben Sie den Wert an die eingebaute Funktion print():

class Person:
    def __init__(self, name, age, city):
        self.name = name
        self.age = age
        self.city = city

person = Person("John Doe", 30, "New York")
print(person.name)
John Doe

Der Ausdruck liest name aus dieser Instanz aus und schreibt den Wert in die Standardausgabe.

Attribute eines Objekts in Python mit der Funktion getattr ausgeben

Verwenden Sie getattr(), wenn der Attributname in einer Variablen gespeichert ist oder erst zur Laufzeit festgelegt wird. Das zweite Argument muss eine Zeichenkette sein. Mit einem optionalen dritten Argument geben Sie einen Ersatzwert an, falls der Name nicht verfügbar ist. Fehlt dieser Ersatzwert, löst ein nicht vorhandenes Attribut AttributeError aus.

class Person:
    def __init__(self, name, age, city):
        self.name = name
        self.age = age
        self.city = city

person = Person("John Doe", 30, "New York")
attribute_name = "city"
city = getattr(person, attribute_name, "Unknown")
print(city)
New York

Ändern Sie attribute_name, um ein anderes Attribut auszuwählen, oder passen Sie den Standardwert an Ihre Anwendung an. Ohne das dritte Argument führt ein fehlender Name zu AttributeError.

Attribute eines Objekts in Python mit dem Attribut __dict__ ausgeben

Das __dict__ einer Instanz ist ihre Attributzuordnung, sofern die Instanz eine solche bereitstellt. Sie enthält Attribute, die in der Instanz gespeichert sind, etwa die in __init__ self.name zugewiesenen Werte. Attribute, die ausschließlich in der Klasse definiert sind, gehören nicht dazu.

class Person:
    def __init__(self, name, age, city):
        self.name = name
        self.age = age
        self.city = city

person = Person("John Doe", 30, "New York")
attributes = person.__dict__
print(attributes["name"])
John Doe

Manche Objekte stellen kein Instanz-__dict__ bereit. Dazu gehören Instanzen von Klassen, die __slots__ ohne ein Dictionary verwenden. Deshalb funktioniert dieser Ansatz nicht für jedes Objekt.

Attribute eines Objekts in Python mit der Funktion dir() auflisten

dir(person) liefert eine sortierte Liste der Namen, die Python für die Untersuchung des Objekts bereitstellt. Dazu können Instanz- und Klassenattribute, Methoden sowie spezielle Namen gehören; die Liste enthält also nicht nur gespeicherte Instanzdaten. Für eine besser lesbare Darstellung einer langen Liste können Sie die Funktion pprint() aus der Standardbibliothek verwenden:

class Person:
    def __init__(self, name, age, city):
        self.name = name
        self.age = age
        self.city = city

person = Person("John Doe", 30, "New York")
print("name" in dir(person))
True

Die Prüfung zeigt, dass name zu den verfügbaren Namen gehört. Welche Namen genau zurückgegeben werden, hängt vom Objekt und seiner Klasse ab; auch eine eigene Methode __dir__() kann das Ergebnis von dir() beeinflussen. Betrachten Sie dir() deshalb als Hilfe zum Entdecken von Namen und nicht als Momentaufnahme des Instanz-Dictionarys. Für eine übersichtlich formatierte vollständige Liste übergeben Sie dir(person) an die Funktion pprint().

Attribute eines Objekts in Python mit der Funktion vars() ausgeben

Für ein Objekt, das __dict__ bereitstellt, gibt vars(person) dieselbe Attributzuordnung der Instanz zurück. Sie können die Zuordnung an pprint() übergeben, um sie lesbar zu formatieren:

class Person:
    def __init__(self, name, age, city):
        self.name = name
        self.age = age
        self.city = city

person = Person("John Doe", 30, "New York")
print(vars(person)["name"])
John Doe

Ein Aufruf von vars() ohne Argument hat einen anderen Zweck: Er gibt die aktuelle lokale Symboltabelle zurück. Wird ein Objekt ohne __dict__ übergeben, löst Python TypeError aus. Verwenden Sie diese Funktion daher für die Attributzuordnung einer Instanz, wenn das Objekt ein Dictionary bereitstellt. Für eine formatierte Ausgabe der gesamten Zuordnung übergeben Sie vars(person) an die Funktion pprint().

Fazit

Wählen Sie die Methode passend zu Ihrer Aufgabe: Verwenden Sie den Punktzugriff mit print() für einen bekannten Wert, getattr() für einen dynamischen Attributnamen, __dict__ oder vars() für gespeicherte Instanzattribute, sofern das Objekt ein Dictionary bereitstellt, und dir() zum Entdecken einer breiteren Auswahl von Namen. Beachten Sie, dass dir() auch Methoden und spezielle Namen enthalten kann, während das Instanz-Dictionary nur die in dieser Instanz gespeicherten Attribute enthält.