Python lazy property decorator
        Posted  
        
            by detly
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by detly
        
        
        
        Published on 2010-06-10T07:26:23Z
        Indexed on 
            2010/06/10
            7:52 UTC
        
        
        Read the original article
        Hit count: 484
        
Recently I've gone through an existing code base and refactored a lot of instance attributes to be lazy, ie. not be initialised in the constructor but only upon first read. These attributes do not change over the lifetime of the instance, but they're a real bottleneck to calculate that first time and only really accessed for special cases.
I find myself typing the following snippet of code over and over again for various attributes across various classes:
class testA(object):
  def __init__(self):
    self._a = None
    self._b = None
  @property
  def a(self):
    if self._a is None:
      # Calculate the attribute now
      self._a = 7
    return self._a
  @property
  def b(self):
    #etc
Is there an existing decorator to do this already in Python that I'm simply unaware of? Or, is there a reasonably simple way to define a decorator that does this?
I'm working under Python 2.5, but 2.6 answers might still be interesting if they are significantly different.
© Stack Overflow or respective owner