Dynamic use of property() fails

andrew cooke andrew at acooke.org
Mon Apr 14 21:43:39 EDT 2008


Hi,

This is my first attempt at new classes and dynamic python, so I am
probably doing something very stupid...  After reading the how-to for
descriptors at http://users.rcn.com/python/download/Descriptor.htm I
decided I would make an object that returns attributes on read, but on
setting calls an arbitrary function.

My code looks like:
class ActiveDAO(object):
    def __init__(self):
        self.__values__ = {}
    def add_field(self, name, value, on_change):
        self.__values__[name] = value
        def get(self): return self.__values__[name]
        def set(self, new_value): self.__values__[name] =
on_change(new_value)
        def delete(self): raise AttributeError
        self.__dict__[name] = property(get, set, delete)

However, when I try to use this (in a test) with code like:
    dao = ActiveDAO()
    dao.add_field("name", "value", lambda _: None)
    assertEqual(dao.name, "value")

I get a failure because lookup of the attribute is returning
"<property object at 0x6b8910>".

That is quite reasonable, but I was under the expression that some
magic was supposed to happen, as described in the document referenced
above!

Please can someone explain why there is no magic?  :o(

Thanks,
Andrew

PS I am using Python 2.5 on Linux



More information about the Python-list mailing list