[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 -- http://mail.python.org/mailman/listinfo/python-list