dictionary - Python: Making a read-only property accessible via **vars(some_class) -


i use idiom '{var_name}'.format(**vars(some_class)).

however, when use property, cannot use properties value.

consider program:

#!/usr/bin/env python  class foo(object):     def __init__(self):         self._bar = none         self.baz = 'baz here'      @property     def bar(self):         if not self._bar:             # calculate value...             self._bar = 'bar here'         return self._bar  if __name__ == '__main__':     foo = foo()      # works:     print('{baz}'.format(**vars(foo)))      # gives: keyerror: 'bar'     print('{bar}'.format(**vars(foo))) 

question:

is there way make properties value accessible via **vars(some_class)?

short answer: no, it's not possible use .format(**vars(object)) want, since properties not use __dict__ , vars documentation:

vars(...)

vars([object]) -> dictionary

  • without arguments, equivalent locals().
  • with argument, equivalent object.__dict__.

however can achieve want using different format specifiers, example attribute lookup:

in [2]: '{.bar}'.format(foo()) out[2]: 'bar here' 

note have add leading . (dot) names , want.


side note: instead of using .format(**vars(object)) should use format_map method:

in [6]: '{baz}'.format_map(vars(foo())) out[6]: 'baz here' 

calling format_map dict argument equivalent calling format using ** notation, more efficient, since doesn't have kind of unpacking before calling function.


Comments

Popular posts from this blog

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

html - How to style widget with post count different than without post count -

url rewriting - How to redirect a http POST with urlrewritefilter -