Prev: setting variables in pdb
Next: how to cause a request for a missing class attribute cause itscalculation
From: Chris Rebert on 18 May 2010 16:54 On Tue, May 18, 2010 at 1:39 PM, Vincent Davis <vincent(a)vincentdavis.net> wrote: > > Lets say I have > class foo(object): >    def __init__(self, x, y): >      self.x=x >      self.y=y >    def xplusy(self): >      self.xy = x+y > inst = foo(1,2) > inst.xy  # no value, but I what this to cause the calculation of inst.xy > I don't what to have self.xy calculated before it is called. class Foo(object): def __init__(self, x, y): self.x = x self.y = y @property def xy(self): '''Will calculate x+y every time''' return self.x + self.y Or if Foo is immutable and you wish to cache x+y: class Foo(object): def __init__(self, x, y): self.x = x self.y = y self._xy = None @property def xy(self): if self._xy is None: self._xy = self.x + self.y return self._xy Suggested reading: http://docs.python.org/library/functions.html#property Cheers, Chris -- http://blog.rebertia.com
From: John Posner on 19 May 2010 13:06
On 5/18/2010 4:54 PM, Chris Rebert wrote: <snip> > Suggested reading: http://docs.python.org/library/functions.html#property I've placed a revision to this official *property* documentation at: http://wiki.python.org/moin/AlternativeDescriptionOfProperty There's also a gentle (I hope) intro to the *property* feature on the Wiki: http://wiki.python.org/moin/ComputedAttributesUsingPropertyObjects -John |