En Fri, 29 Feb 2008 19:00:06 -0200, Bronner, Gregory <[EMAIL PROTECTED]> escribi�:
> I'm trying to create a type-safe subclass of int (SpecialInt) such that > instances of the class can only be compared with ints, longs, and other > subclasses of SpecialInt -- I do not want them to be compared with > floats, bools, or strings, which the native int implementation supports. > > Obviously, I could overload __lt_, __eq__, __le__, etc, and write a > bunch of boilerplate code. > > Should this code throw an exception if the types are not comparable? > What would I lose by doing that? > > def __gt__(self, other): > if(other is self): > return False > if(self.__isComparable(other)): > return int(self)>int(other) > else: > raise ValueError(str(self) +" and "+ str(other) > +" are not comparable") I think that the easiest way is to write __cmp__ similar to your code above, and then redefine __gt__, __ge__ etc based on that. __gt__ = lambda self, other: self.__cmp__(other)>0 Note that you have to override a lot of methods too; if x is a SpecialInt instance, abs(x) or x+1 will return a plain integer instead. > Is this code likely to be efficient? Unless you implement the above in a C extension, certainly it will run much slower than the original int implementation. But measure how much this is going to affect you. -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list