On 27Oct2016 0251, Serhiy Storchaka wrote: > On 27.10.16 02:44, Eric V. Smith wrote: >> But on the other hand, the existing behavior is well specified and has >> been around since object.__format__ was added. I'm not sure it needs >> changing. What's the harm in leaving it? > > More complicated code. And maybe this behavior is less intuitive. It > contradicts the documentation. > > From the documentation of the format() builtin [1]: > > "The default format_spec is an empty string which usually gives the same > effect as calling str(value)." > > From the description of the format specification mini-language [2]: > > "A general convention is that an empty format string ("") produces the > same result as if you had called str() on the value." > > [1] https://docs.python.org/3/library/functions.html#format > [2] https://docs.python.org/3/library/stdtypes.html#str.format > The only point where this bothers me is that alignments don't work: >>> class F: pass ... >>> '{}'.format(F()) '<__main__.F object at 0x000002148AFE6B70>' >>> '{:100}'.format(F()) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: non-empty format string passed to object.__format__ >>> '{:<100}'.format(F()) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: non-empty format string passed to object.__format__ You need to explicitly include '!s' to be able to align it, which then means overriding __format__ in that class later won't have any effect. >>> '{!s:<100}'.format(F()) '<__main__.F object at 0x000002148AFEE240> ' Having the default __format__ behave like this makes me happiest: ... def __format__(self, fmt): ... return format(str(self), fmt) My 2c. YMMV. etc. Cheers, Steve
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4