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



