`__str__` einer Unterklasse wird in einer F-String nicht gerufen
Posted: 14 Sep 2025, 10:43
Ich habe eine Unterklasse von Dezimalern geschrieben, um einen Geldbetrag darzustellen. Ich habe einen benutzerdefinierten __str __ geschrieben, um die Währung zusammen mit einem Zeichenformat anzuzeigen. Meine Methode funktioniert beim Aufrufen von str () , aber in einer F-String wird mein benutzerdefinierter __str __ nicht verwendet. Was passiert hier? Etwas entspricht, das mein aktuelles Verständnis von __str __ , __format __ und Erbschaft widerspricht. Ich dachte, das Standardverhalten von Format ohne angegebenes Format bestand darin, an Str zu delegieren, aber hier sendet es stattdessen an Str der übergeordneten Klasse.
Python -Version ist 3.13.7.
Code: Select all
from decimal import Decimal
class Money(Decimal):
CURRENCY = "€"
def __new__(cls, number):
return super().__new__(cls, Decimal(number).quantize(Decimal("0.01")))
def __str__(self):
return f"{self:+}{self.CURRENCY}"
m = Money(10)
print("Test 1 - str():", str(m))
print("Test 2 - print():", m)
print(f"Test 3 - f-string: {m}")
print("Test 4 - f-string str():", f"{str(m)}")
< /code>
Dies führt zu < /p>
Test 1 - str(): +10.00€
Test 2 - print(): +10.00€
Test 3 - f-string: 10.00 # only here is my custom str not called
Test 4 - f-string str(): +10.00€