descriptors for container items

bruno modulix onurb at xiludom.gro
Fri Sep 2 11:55:11 CEST 2005

Terry Reedy wrote:
> "Brock Filer" <filerba at> wrote in message 
> news:ffdbcc8dcfa9ff84b34b3285e4d213a5 at
>>This is going to be used in user-input formulae, so I'm willing to do a
>>lot of work for minor beautifications. I'd like to be able to say (I
>>know, the quotes are still ugly, but at least you save a bracket):
>>That's easy to do with a __div__ method, but it only works for getting,
>>not setting or deleting.
>>I'd appreciate any thoughts on this problem.
> I personally would first try to dump the quotes and use standard 
> attributes -- -- 


> and the  __get/set/delattr__  methods.
>>I keep thinking descriptors might be involved somehow in the solution,
>>but I may be on a completely wrong track.
> As far as I know, 'descriptor' is a behind-the-scenes concept, not 
> something you directly program with.  Perhaps you meant 'property'. 

Properties are just syntactic sugar for a possible use of descriptors. A
descriptor is just an object that follows a specific protocol (__get__,
__set__, __del__) and is used as an attribute or method (the difference
is very thin) of another object. You'll find all the relevant doc on

> However, properties are fixed in number when you create the class.

Dynamically adding attributes to an object (or a class - which is just
another object) is not a problem.

If what you need is to provide an higher level view of your data,
descriptors may be a good choice. I used them that way for a
higher-level ldap API, where the class representing the LDAP object
mainly stores the raw result (as returned by python-ldap) of the ldap
query and uses descriptors to provide controlled (an simpler) access to
the data.

You may also want to read a recent thread here about descriptors:

bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb at xiludom.gro'.split('@')])"

More information about the Python-list mailing list