On 9/13/2018 8:04 PM, Victor Stinner wrote:

Le ven. 14 sept. 2018 à 00:09, Eric V. Smith <e...@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

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to