On 2008-05-16, Kay Schluehr <[EMAIL PROTECTED]> wrote: > On 16 Mai, 10:03, "A.T.Hofkamp" <[EMAIL PROTECTED]> wrote: >> Hello all, >> >> Yesterday we found the cause of a bug that has caused problems for a long >> time. >> It appeared to be the following: >> >> class A(object): >> pass >> >> print min(1.0, A()) >> >> which is accepted by Python even though the A() object is not numerical in >> nature. >> >> The cause of this behavior seems to be the compare operation of the object >> class. >> >> Is there a way to disable this behavior in Python (other than deriving a new >> 'object-like' class that doesn't do comparisons?) >> >> Sincerely, >> Albert > > Are you sure you don't want to use a statically typed language that > captures all type errors just by inspecting your source code?
yes. The problem here is that it isn't caught at all, neither at 'compile' time nor at run-time. That means that the Python language considers this proper code. Whether you make that decision by inspecting source code or at run-time is irrelevant here. Unfortunaly, we have to maintain Python 2.3 compability. As a solution, I have created a new BaseObject class as follows: class BaseObject(object): """ Generic base class without default compare and hashing functions. """ def __cmp__(self, other): """ Disable default compare method """ raise NotImplementedError def __hash__(self): """ Disable default hashing method """ raise NotImplementedError("Implement me in class '%s'" % self.__class__.__name__) Sincerely, Albert -- http://mail.python.org/mailman/listinfo/python-list