Re: Dynamic use of property() fails
- From: "Gabriel Genellina" <gagsl-py2@xxxxxxxxxxxx>
- Date: Mon, 14 Apr 2008 23:06:47 -0300
En Mon, 14 Apr 2008 22:43:39 -0300, andrew cooke <andrew@xxxxxxxxxx> escribió:
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!
The "magic" happens when the descriptor is found in the *class*, not in the instance. I think it's detailed in Hettinger's document.
Do you actually want "per-instance" defined properties?
__special__ names are reserved for Python internal usage; don't use them. Implementation-only attributes ("private" ones) are spelled with a single underscore.
--
Gabriel Genellina
.
- Follow-Ups:
- Re: Dynamic use of property() fails
- From: Hrvoje Niksic
- Re: Dynamic use of property() fails
- From: andrew cooke
- Re: Dynamic use of property() fails
- References:
- Dynamic use of property() fails
- From: andrew cooke
- Dynamic use of property() fails
- Prev by Date: Brand New!
- Next by Date: Re: py3k s***s
- Previous by thread: Dynamic use of property() fails
- Next by thread: Re: Dynamic use of property() fails
- Index(es):
Relevant Pages
|
|