Roll back Raymond's -r64098 while we think of something better.

(See issue 3056 -- we're close to a resolution but need unittests.)
This commit is contained in:
Guido van Rossum 2008-06-17 17:38:02 +00:00
parent 9828b7ea08
commit 21a45e1bea

View file

@ -283,54 +283,87 @@ class Rational(Real):
class Integral(Rational): class Integral(Rational):
"""Integral adds a conversion to int and the bit-string operations.""" """Integral adds a conversion to long and the bit-string operations."""
@abstractmethod @abstractmethod
def __int__(self): def __long__(self):
"""int(self)""" """long(self)"""
raise NotImplementedError raise NotImplementedError
def __index__(self): def __index__(self):
"""index(self)""" """index(self)"""
return int(self) return long(self)
@abstractmethod
def __pow__(self, exponent, modulus=None):
"""self ** exponent % modulus, but maybe faster.
Accept the modulus argument if you want to support the
3-argument version of pow(). Raise a TypeError if exponent < 0
or any argument isn't Integral. Otherwise, just implement the
2-argument version described in Complex.
"""
raise NotImplementedError
@abstractmethod
def __lshift__(self, other): def __lshift__(self, other):
return int(self) << int(other) """self << other"""
raise NotImplementedError
@abstractmethod
def __rlshift__(self, other): def __rlshift__(self, other):
return int(other) << int(self) """other << self"""
raise NotImplementedError
@abstractmethod
def __rshift__(self, other): def __rshift__(self, other):
return int(self) >> int(other) """self >> other"""
raise NotImplementedError
@abstractmethod
def __rrshift__(self, other): def __rrshift__(self, other):
return int(other) >> int(self) """other >> self"""
raise NotImplementedError
@abstractmethod
def __and__(self, other): def __and__(self, other):
return int(self) & int(other) """self & other"""
raise NotImplementedError
@abstractmethod
def __rand__(self, other): def __rand__(self, other):
return int(other) & int(self) """other & self"""
raise NotImplementedError
@abstractmethod
def __xor__(self, other): def __xor__(self, other):
return int(self) ^ int(other) """self ^ other"""
raise NotImplementedError
@abstractmethod
def __rxor__(self, other): def __rxor__(self, other):
return int(other) ^ int(self) """other ^ self"""
raise NotImplementedError
@abstractmethod
def __or__(self, other): def __or__(self, other):
return int(self) | int(other) """self | other"""
raise NotImplementedError
@abstractmethod
def __ror__(self, other): def __ror__(self, other):
return int(other) | int(self) """other | self"""
raise NotImplementedError
@abstractmethod
def __invert__(self): def __invert__(self):
return ~int(self) """~self"""
raise NotImplementedError
# Concrete implementations of Rational and Real abstract methods. # Concrete implementations of Rational and Real abstract methods.
def __float__(self): def __float__(self):
"""float(self) == float(int(self))""" """float(self) == float(long(self))"""
return float(int(self)) return float(long(self))
@property @property
def numerator(self): def numerator(self):