Das Verständnis der `__str__` Methode in Python
Lukas Schneider
DevOps Engineer · Leapcell

Key Takeaways
- Die Methode
__str__
definiert eine benutzerfreundliche String-Repräsentation von Python-Objekten. - Das Überschreiben von
__str__
verbessert die Lesbarkeit beim Drucken oder Protokollieren von Objekten. __str__
unterscheidet sich von__repr__
, das sich an Entwickler und das Debugging richtet.
In Python hat jedes Objekt eine String-Repräsentation. Die Methode __str__
spielt eine entscheidende Rolle bei der Definition, wie Ihre Objekte als Strings dargestellt werden. Wenn Sie jemals ein Objekt gedruckt oder mit str()
in einen String konvertiert haben, haben Sie mit __str__
interagiert – ob Sie es wussten oder nicht.
Was ist __str__
?
Die Methode __str__
ist eine spezielle (oder „magische“) Methode in Python, die verwendet wird, um die „informelle“ oder benutzerfreundliche String-Repräsentation eines Objekts zu definieren. Sie wird aufgerufen, wenn Sie die eingebaute Funktion str()
oder die Funktion print()
für ein Objekt verwenden.
Syntax
class MyClass: def __str__(self): return "Dies ist eine String-Repräsentation von MyClass"
Wenn Sie Folgendes ausführen:
obj = MyClass() print(obj)
Ausgabe:
Dies ist eine String-Repräsentation von MyClass
Warum __str__
überschreiben?
Standardmäßig greift Python auf eine generische Implementierung zurück, die in der Basisklasse object
definiert ist, wenn Sie __str__
nicht überschreiben. Diese Standardeinstellung gibt typischerweise einen String wie diesen zurück:
<__main__.MyClass object at 0x7f1a2b3c4d50>
Was für Benutzer oder Entwickler nicht sehr hilfreich ist. Das Überschreiben von __str__
ermöglicht es Ihnen, Ihre Klasse lesbarer zu machen, insbesondere beim Debuggen und Protokollieren.
Unterschied zwischen __str__
und __repr__
Obwohl sich sowohl __str__
als auch __repr__
mit String-Repräsentationen befassen, dienen sie unterschiedlichen Zwecken:
__str__
soll einen für Menschen lesbaren String zurückgeben.__repr__
soll einen eindeutigen String zurückgeben, der idealerweise verwendet werden könnte, um das Objekt neu zu erstellen.
Beispiel
class Book: def __init__(self, title, author): self.title = title self.author = author def __str__(self): return f"{self.title} von {self.author}" def __repr__(self): return f"Book(title={self.title!r}, author={self.author!r})"
Jetzt:
book = Book("1984", "George Orwell") print(str(book)) # 1984 von George Orwell print(repr(book)) # Book(title='1984', author='George Orwell')
Bewährte Verfahren
- Halten Sie Ihre
__str__
-Ausgabe prägnant und benutzerfreundlich. - Nehmen Sie nur die relevantesten Attribute auf, die zur Beschreibung des Objekts beitragen.
- Überladen Sie den String nicht mit zu vielen Details – überlassen Sie das
__repr__
.
Wann wird __str__
aufgerufen?
- Bei Verwendung von
print(obj)
- Beim Aufruf von
str(obj)
- In f-Strings wie
f"{obj}"
Wenn __str__
nicht definiert ist, __repr__
aber schon, greift str()
auf __repr__
zurück.
Fazit
Das Überschreiben der Methode __str__
ist eine kleine, aber wirkungsvolle Möglichkeit, Ihre Python-Klassen intuitiver und benutzerfreundlicher zu gestalten. Indem Sie anpassen, wie Ihre Objekte als Strings dargestellt werden, können Sie das Debuggen, die Protokollierung und die allgemeine Code-Klarheit verbessern.
FAQs
Es wird aufgerufen, wenn print()
, str()
oder f-Strings wie f"{obj}"
verwendet werden.
Python greift auf __repr__
zurück, falls verfügbar; andernfalls wird ein Standardobjekt-String verwendet.
Ja, und es ist eine bewährte Vorgehensweise, beide für eine klare Ausgabe und Debugging-Unterstützung zu definieren.
Wir sind Leapcell, Ihre Top-Wahl für das Hosten von Python-Projekten.
Leapcell ist die Serverless-Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Multi-Language-Unterstützung
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt Projekte kostenlos bereit
- Zahlen Sie nur für die Nutzung – keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 US-Dollar unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und -protokollierung für umsetzbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Automatische Skalierung zur einfachen Bewältigung hoher Parallelität.
- Kein operativer Aufwand – konzentrieren Sie sich einfach aufs Bauen.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ