using % operator to print possibly unitialized data attributes

François Pinard pinard at iro.umontreal.ca
Sat Sep 10 00:40:24 CEST 2005


[Adam Monsen]

> The following code uses the % operator to print possibly unitialized
> data attributes:
> ------------------------8<------------------------
> class J:
>     name = ''
>     value = ''
>     def __str__(self):
>         vals = self.__class__.__dict__
>         vals.update(self.__dict__)
>         return 'name="%(name)s" value="%(value)s' % vals

> j = J()
> j.name = "j object"
> print j
> ------------------------>8------------------------

> A couple of questions:
> * is there a simpler or more elegant way to do this?
> * how can I get this to work for new-style classes?

One solution which I used a few times, and which also opens the way to
many other niceties, is to manage so `vals' is a `dict'-like type of
your own.  Then, you write its `__getitem__' method the way you want.

If I remember well, one of the niceties is that whenever `%(EXPR)s'
is used in a format string, EXPR may be a string (well balanced with
regard to parentheses) which you may then choose to "evaluate", for any
definition of "evaluate" which is fruitful for your application. :-)

-- 
François Pinard   http://pinard.progiciels-bpi.ca



More information about the Python-list mailing list