Why property works only for objects?
Steven Bethard
steven.bethard at gmail.com
Thu Mar 9 22:53:27 EST 2006
Michal Kwiatkowski wrote:
> Code below shows that property() works only if you use it within a class.
Yes, descriptors are only applied at the class level (that is, only
class objects call the __get__ methods).
> Is there any method of making descriptors on per-object basis?
I'm still not convinced that you actually want to, but you can write
your own descriptor to dispatch to the instance object (instead of the
type):
>>> class InstanceProperty(object):
... def __init__(self, func_name):
... self.func_name = func_name
... def __get__(self, obj, type=None):
... if obj is None:
... return self
... return getattr(obj, self.func_name)(obj)
...
>>> class C(object):
... x = InstanceProperty('_x')
...
>>> c = C()
>>> c.x
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
File "<interactive input>", line 7, in __get__
AttributeError: 'C' object has no attribute '_x'
>>> def getx(self):
... return 42
...
>>> c._x = getx
>>> c.x
42
STeVe
More information about the Python-list
mailing list