[Python-Dev] RFC: readproperty
Jim Fulton
jim at zope.com
Wed Sep 28 16:16:12 CEST 2005
Read descriptors (defining only __get__) and data descripttors have
(defining __get__ and __set__) different semantics. In particular,
read descriptors are overridden by instance data, while data
descriptors are not. A common use of read descriptors is for lazily
computed data:
class readproperty(object):
"Create a read descriptor from a function"
def __init__(self, func):
self.func = func
def __get__(self, inst, class_):
if inst is None:
return self
return self.func(inst)
class Spam:
@readproperty
def eggs(self):
... expensive computation of eggs
self.eggs = result
return result
When we ask for the eggs attribute the first time, we call the
descriptor, which calls the eggs function. The function sets the eggs
attribute, overriding the descriptor. The next time the eggs attribute
is accessed, the saved value will be used without calling the
descriptor.
I do this often enough that I think it would be useful to include it
in python, either as a builtin (like property) or in the library. (Or
possibly by adding an option to property to generate a read
descriptor.) I'd be happy to add this for 2.5.
Thoughts?
Jim
--
Jim Fulton mailto:jim at zope.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
More information about the Python-Dev
mailing list