On Fri, 18 Mar 2011 15:35:40 -0700, Martin De Kauwe wrote: >> Don't check for bounds, fix any bug in the code that would set your >> values out of bounds and use asserts while debugging. >> >> > whilst that is a nice idea in practice this just is not a practical > solution.
Sorry, are you trying to say that it is not practical to write correct code that isn't buggy? Well, you're honest, at least, still I can't help but feel that you're admitting defeat before even starting. >> Otherwise if you really need dynamic checks, it will cost you cpu, for >> sure. > > Yes I agree and I hadn't decided whether to add it or not as there > aren't any current issues. However I can see that the check would > overall be safer. I was just wondering if there was some super smartie > pants solution :P Make each of the attributes a computed attribute with a setter that raises an exception if you try to store a negative value. That way each attribute is responsible for ensuring that itself is never negative. Here's a toy example: >>> class Demo(object): ... def __init__(self, x): ... self.x = x ... def _getx(self): ... return self._x ... def _setx(self, value): ... if value < 0: ... raise ValueError('attempt to set x to negative value') ... self._x = value ... x = property(_getx, _setx) ... >>> d = Demo(-42) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in __init__ File "<stdin>", line 8, in _setx ValueError: attempt to set x to negative value >>> d = Demo(42) >>> d.x 42 >>> d.x = -23 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 8, in _setx ValueError: attempt to set x to negative value >>> d.x = 23 >>> d.x 23 -- Steven -- http://mail.python.org/mailman/listinfo/python-list