Why property works only for objects?
Michal Kwiatkowski
ruby at no.spam
Thu Mar 9 23:45:18 EST 2006
Steven Bethard napisał(a):
>> 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):
Ok, this works for attributes I know a name of at class definition. What
about other situations? I could possibly want to have different sets of
attributes for instances of a class. Is it still possible to do? I don't
also like current solution, as it wraps things around, creating another
attribute ('_x') in the process. Aren't there any cleaner solutions?
The problem is I have an instance of a given class (say BaseClass) and I
want it to implement some attribute accesses as method calls. I'm not a
creator of this object, so changing definition of BaseClass or
subclassing it is not an option. Code below doesn't work, but shows my
intention:
# obj is instance of BaseClass
def get_x(self):
# ...
def set_x(self, value):
# ...
obj.x = property(get_x, set_x)
Changing __setattr__/__getattr__ of an object also doesn't work for the
same reason: dictionary lookup is made only in class attributes,
ommiting object attributes. It's confusing, because writting obj.x and
obj.__getattribute__('x') gives a different results. There also seems
not to be any clear way to define methods for objects. Something like:
class C(object):
pass
def method(self):
return self.x
c = c.x
c.method = method
c.method() # => AttributeError
So another question arise. Is it possible to make function a method (so
it will receive calling object as first argument)?
mk
--
. o . >> http://joker.linuxstuff.pl <<
. . o It's easier to get forgiveness for being wrong
o o o than forgiveness for being right.
More information about the Python-list
mailing list