Ответ 1
Да, но используя __format__
, а не __fstr__
.
f
-строки не были перестройкой предыдущих методов форматирования строк. Вместо этого он построен на уже существующих протоколах.
Из PEP 0498, который представил их в Обоснование кода:
Точный код, используемый для реализации f-строк, не указан. Тем не менее, гарантируется, что любое встроенное значение, которое преобразуется в строку, будет использовать это значение
__format__
. Это тот же механизм, которыйstr.format()
использует для преобразования значений в строки.
а затем снова в Спецификаторы формата:
Как только выражения в спецификаторе формата оцениваются (если необходимо), спецификаторы формата не интерпретируются f-string-оценщиком. Как и в
str.format()
, они просто передаются методу__format__()
объекта, отформатированного.
Итак, для них нет специального специального метода. Вам нужно определить метод __format__
, который принимает спецификацию и возвращает соответствующую форматированную строку.
В документах __format__
также описываются:
Вызывается встроенной функцией
format()
и расширением, оценивая форматированные строковые литералы и методstr.format()
, чтобы создать "форматированное" строковое представление объекта.