Рассмотрим код,
def __str__(self):
return f'{self} €'
Теперь, когда вы вызываете print(g)
, на самом деле происходит то, что print(g)
вызывает __str__
метод Euro
, который возвращает f'{self} €'
, как self
относится к самому экземпляру Euro
, это вызывает дальнейшие вызовы __str__
метода Euro
, и эта рекурсия продолжается до тех пор, пока stackoverflow не произойдет.
Для решения этой проблемы проблема, вы должны убедиться, что рекурсия не произойдет, вы можете добиться этого следующим образом:
class Euro(float):
def __new__(self, value):
self.value = "".join([_ for _ in value if _ != '€' and _ != " " ])
return float.__new__(self, self.value)
def __str__(self):
return f'{self.value} €' # or return super().__str__() + ' €'
Теперь, когда вы звоните, print(g)
это вернет, 123.23 €
как и ожидалось.
Надеюсь, это поможет!