How to automate accessor definition?

John Posner jjposner at optimum.net
Mon Mar 22 13:36:34 EDT 2010


On 3/22/2010 11:44 AM, Bruno Desthuilliers wrote:

<snip>

> Another (better IMHO) solution is to use a plain property, and store the
> computed value as an implementation attribute :
>
> @property
> def foo(self):
> cached = self.__dict__.get('_foo_cache')
> if cached is None:
> self._foo_cache = cached = self._some_time_consuming_operation()
> return cached
>

There's no need to access __dict__ directly. I believe this is 
equivalent (and clearer):

  @property
  def foo(self):
      try:
          cached = self._foo_cache
      except AttributeError:
          self._foo_cache = cached = self._time_consuming_op()
      return cached

-John



More information about the Python-list mailing list