On 9/13/2018 8:04 PM, Victor Stinner wrote: > Le ven. 14 sept. 2018 à 00:09, Eric V. Smith <eric at trueblade.com> a écrit : >> f'{type(obj)}' becomes type(obj).__format__(''), so you can return >> something other than __str__ or __repr__ does. It's only by convention >> that an object's __format__ returns __str__: it need not do so. > What's New in Python 3.7 contains: > >> object.__format__(x, '') is now equivalent to str(x) rather than format(str(self), ''). >> (Contributed by Serhiy Storchaka in bpo-28974.) > https://bugs.python.org/issue28974 > > Oh, I didn't know that a type is free to change this behavior: return > something different than str(obj) if the format spec is an empty > string. True! That issue was specific to object.__format__, not any other classes implementation of __format__. > So are you suggesting to change type(obj).__format__('') to return the > fully qualified name instead of repr(type)? I'm not suggesting it, I'm saying it's possible. It indeed might be the most useful behavior. > So "%s" % type(obj) would use repr(), but "{}".format(type(obj)) and > f"{type(obj)}" would return the fully qualified name? > "%s" % type(obj) would use str(), not repr. You could either: - keep with convention and have type(obj).__format__('') return type(obj).__str__(), while type(obj).__format__('#') (or what other char you want to use) return the qualname; or - just have type(obj).__format__('') return the qualname, if that's the more useful behavior. Eric
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