[Python-ideas] String formatting and namedtuple
Guido van Rossum
guido at python.org
Wed Feb 11 22:10:17 CET 2009
On Wed, Feb 11, 2009 at 1:05 PM, Calvin Spealman <ironfroggy at gmail.com> wrote:
> On Wed, Feb 11, 2009 at 3:53 PM, Guido van Rossum <guido at python.org> wrote:
>> On Wed, Feb 11, 2009 at 12:11 PM, Raymond Hettinger <python at rcn.com> wrote:
>>> This is not unique to named tuples. String interpolation and the string
>>> format do not use getattr() style access with any kind of object:
>>>
>>> print '<%(real)s, %(imag)s>' % (3+4j) # doesn't find real/imag attributes
>>
>> Hm... I see a feature request brewing. In some use cases it might make
>> a *lot* of sense to have a variant of .format() that uses __getattr__
>> instead of __getitem__...
>
> Perhaps the feature request here should be that vars() be able to work
> on built-in types like these, so we could just use it as a simple
> wrapper.
I don't think you need vars(). vars() is for discovery of *all*
attributes, but .format() doesn't need that. An adaptor like this
would do it, but it would be nice if there was a shorthand for
something like this (untested) snippet:
class GetItemToGetAttrAdaptor:
def __init__(self, target):
self.target = target
def __getitem__(self, key):
try:
return getattr(self.target, key)
except AttributeError as e:
raise KeyError(str(e))
You could then use "re={real} im={imag}".format(GetItemToGetAttrAdaptor(1j+2))
--
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-ideas
mailing list