reuse validation logic with descriptors
David S.
davidschein at alumni.tufts.edu
Tue Mar 1 14:35:38 EST 2005
Steven Bethard <steven.bethard <at> gmail.com> writes:
>
> David S. wrote:
> > I am looking for a way to implement the same simple validation on many
> > instance attributes and I thought descriptors
> > (http://users.rcn.com/python/download/Descriptor.htm) looked like the
> > right tool.
> >
> Looks like you're trying to reinvent the property descriptor. Try using
> the builtin property instead:
>
> py> def getchar(self):
> ... if not hasattr(self, '_char'):
> ... self._char = None
> ... return self._char
> ...
> py> def setchar(self, value):
> ... if not len(value) == 1:
> ... raise ValueError
> ... self._char = value
> ...
> py> singlechar = property(getchar, setchar)
> py> class Flags(object):
> ... a = singlechar
> ... b = singlechar
> ...
> py> f = Flags()
> py> f.a = "a"
> py> f.b = "bb"
> Traceback (most recent call last):
> File "<interactive input>", line 1, in ?
> File "<interactive input>", line 3, in setchar
> ValueError
>
This still fails to work for instances variables of the class. That is
if I use your property in the following:
py> ...class Flags(object):
... def __init__(self):
... a = singlechar
...
py> f = Flags()
py> f.a = "a"
Now f.a.__class__.__name__ returns 'str'. So the property was not
used at all.
Also, it seems that using a property, I can not do the other useful
things I can do with a proper class, like provide an __init__, __str__,
or __repr__.
Again, thanks,
David S.
More information about the Python-list
mailing list