[Python-Dev] Default formatting

Ethan Furman ethan at stoneleaf.us
Sun Jan 22 15:07:04 EST 2017


On 01/22/2017 11:48 AM, Serhiy Storchaka wrote:
> On 25.10.16 12:37, Serhiy Storchaka wrote:
>> Classes that doesn't define the __format__ method for custom PEP 3101
>> formatting inherits it from parents.
>>
>> Originally the object.__format__ method was designed as [1]:
>>
>>     def __format__(self, format_spec):
>>         return format(str(self), format_spec)
>>
>> An instance is converted to string and resulting string is formatted
>> according to format specifier.
>>
>> Later this design was reconsidered [2], and now object.__format__ is
>> equivalent to:
>>
>>     def __format__(self, format_spec):
>>         assert format_spec == ''
>>         return format(str(self), '')
>>
>> Non-empty format specifier is rejected.
>>
>> But why call format() on resulting string? Why not return resulting
>> string as is? object.__format__ could be simpler (not just
>> implementation, but for understanding):
>>
>>     def __format__(self, format_spec):
>>         assert format_spec == ''
>>         return str(self)
>>
>> This can change the behaviour in corner case. str(self) can return not
>> exact string, but string subclass with overloaded __format__. But I
>> think we can ignore such subtle difference.
>>
>> [1] https://www.python.org/dev/peps/pep-3101/
>> [2] http://bugs.python.org/issue7994

Can you give an example of this corner case?

--
~Ethan~


More information about the Python-Dev mailing list