On 12/16/2013 03:49 PM, Nick Coghlan wrote: > > On 17 Dec 2013 02:23, "Eric V. Smith" <e...@trueblade.com > <mailto:e...@trueblade.com>> wrote: >> >> On 12/16/2013 10:29 AM, Walter Dörwald wrote: >> > I'd vote for including the module name in the string and using >> > __qualname__ instead of __name__, i.e. make "{:T}".format(obj) >> > equivalent to >> > "{0.__class__.__module__}.{0.__class__.qualname__}".format(obj). >> >> That's not possible in general. The format specifier interpretation is >> done by each type. So, you could add this to str.__format__ and >> int.__format__, but you can't add it to an arbitrary type's __format__. >> For example, types not in the stdlib would never know about it. > > That just suggests it would need to be a type coercion code, like !a, > !r, and !s. However, that observation also suggests that starting with a > "classname" or "typename" builtin would be more appropriate than jumping > directly to a formatting code.
That's an excellent observation, Nick, including that it should be based on a builtin. But I'd suggest something like classof(), and have it's __format__ "do the right thing". But it all seems like overkill for this problem. > We've definitely drifted well into python-ideas territory at this point, > though :) True enough! Eric. > Cheers, > Nick. > >> >> There's no logic for calling through to object.__format__ for unknown >> specifiers. Look at datetime, for example. It uses strftime, so "T" >> currently just prints a literal "T". >> >> And for object.__format__, we recently made it an error to specify any >> format string. This is to prevent you from calling >> format(an_object, ".30") >> and "knowning" that it's interpreted by str.__format__ (because that's >> the default conversion for object.__format__). If in the future >> an_object's class added its own __format__, this code would break (or at >> least do the wrong thing). >> >> But I really do like the idea! Maybe there's a way to just make >> obj.__class__ recognize "T", so you could at least do: >> format(obj.__class__, "T") >> or equivalently: >> "{:T}".format(obj.__class__) >> >> I realize that having to use .__class__ defeats some of the beauty of >> this scheme. >> >> Eric. >> >> >> _______________________________________________ >> Python-Dev mailing list >> Python-Dev@python.org <mailto:Python-Dev@python.org> >> https://mail.python.org/mailman/listinfo/python-dev >> Unsubscribe: > https://mail.python.org/mailman/options/python-dev/ncoghlan%40gmail.com > > > > _______________________________________________ > 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/eric%2Ba-python-dev%40trueblade.com > _______________________________________________ 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