From: Chris Rebert on
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
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