Код: Выделить всё
class Storage(float):
def __new__(cls, value, unit):
instance = super().__new__(cls, value)
instance.unit = unit
return instance
def __str__(self):
return f"{super().__repr__()} {self.unit}" # 1.
# return f"{super().__str__()} {self.unit}" # 2.
def __repr__(self):
return f'Storage({super().__repr__()}, "{self.unit}")' # a.
# return f'Storage({super().__str__()}, "{self.unit}")' # b.
- Случай 1a дает желаемый результат:
Код: Выделить всё
>>> storage = Storage(512, "GB")
>>> str(storage)
'512.0 GB'
>>> repr(storage)
'Storage(512.0, "GB")'
- case 1b дает ожидаемый str () вывод, но Recursionerror для repr () .
- Случай 2a дает ожидаемый результат repr(), но неожиданный результат str():
Код: Выделить всё
>>> str(storage)
'Storage(512.0, "GB") GB'
- Случай 2b выдает RecursionError как для str(), так и для repr().
Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-python
Мобильная версия