implementing descriptors
dippim
david.mcwright at usbfmi.com
Fri Aug 14 09:48:11 EDT 2009
On Aug 14, 2:34 am, Raymond Hettinger <pyt... at rcn.com> wrote:
> [David]
>
>
>
> > I am new to Python and I have a question about descriptors. If I have
> > a class as written below, is there a way to use descriptors to be
> > certain that the datetime in start is always before the one in end?
>
> > class foo(object):
> > def __init__(self,a = None,b = None)
> > self.start = a
> > self.end = b
>
> > from datetime import datetime
> > c = datetime(2009,8,13,6,15,0)
> > d = datetime(2009,8,14,12,0,0)
> > afoo = foo(c,d)
>
> > For instance, if the following code were run, I would like to instance
> > of foo to switch the start and end times.
>
> > afoo.start = datetime(2010,8,13,6,15,0)
>
> > I was thinking of using the __set__ descriptor to catch the assignment
> > and reverse the values if necessary, but I can't figure out how to
> > determine which values is being set.
>
> You're on the right track, but it is easier to use property() than to
> write your own custom descriptor with __get__ and __set__.
>
> class foo(object):
> def __init__(self,a = None,b = None):
> self._start = a
> self._end = b
> def get_start(self):
> return self._start
> def set_start(self, value):
> if self._end is None or value < self._end:
> self._start = value
> else:
> self._end = value
> start = property(get_start, set_start)
> def get_end(self):
> return self._end
> def set_end(self, value):
> if self._start is None or value > self._start:
> self._end = value
> else:
> self._start = value
> end = property(get_end, set_end)
>
> Raymond
Raymond,
This functionality is exactly what I was looking for. Thanks! I'll
be using this to solve my problem.
Now that I'm on the right track, I'm still a bit confused about how
__get__ and __set__ are useful. Admittedly, I don't need to
understand them to solve this problem, but perhaps they may be useful
in the future. If I wanted to solve this problem using __get__ and
__set__ could it be done?
Thanks Again!
More information about the Python-list
mailing list