I had always thought that f-strings invoked the __str__ method. That is, f'{x}' was always the same as str(x). However, with this class
class Thing(enum.IntEnum):
A = 0
f'{Thing.A}' is '0' while str(Thing.A) is 'Thing.A'. This example doesn't work if I use enum.Enum as the base class.
What functionality do f-strings invoke?