diff options
author | Christian Heimes <christian@cheimes.de> | 2008-02-01 08:12:03 (GMT) |
---|---|---|
committer | Christian Heimes <christian@cheimes.de> | 2008-02-01 08:12:03 (GMT) |
commit | 400adb030a78c3fcb1eb458b25c990449fbf3c93 (patch) | |
tree | 8dc99c561ec91ec9d2f887eb7b04e7227d30b8ac /Lib/rational.py | |
parent | a7712090f78d19d0711553d58e403c9fa44474a8 (diff) | |
download | cpython-400adb030a78c3fcb1eb458b25c990449fbf3c93.zip cpython-400adb030a78c3fcb1eb458b25c990449fbf3c93.tar.gz cpython-400adb030a78c3fcb1eb458b25c990449fbf3c93.tar.bz2 |
Merged revisions 60475-60479,60481-60488 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r60482 | raymond.hettinger | 2008-01-31 23:07:16 +0100 (Thu, 31 Jan 2008) | 1 line
Minor wordsmithing on docstring
........
r60483 | mark.dickinson | 2008-01-31 23:17:37 +0100 (Thu, 31 Jan 2008) | 5 lines
Issue #1678380. Fix a bug that identifies 0j and -0j when they appear
in the same code unit. The fix is essentially the same as the fix for a
previous bug identifying 0. and -0.
........
r60484 | christian.heimes | 2008-02-01 00:08:23 +0100 (Fri, 01 Feb 2008) | 1 line
Fixed bug #1983: Return from fork() is pid_t, not int
........
r60486 | jeffrey.yasskin | 2008-02-01 07:22:46 +0100 (Fri, 01 Feb 2008) | 4 lines
Move __builtins__.trunc() to math.trunc() per
http://mail.python.org/pipermail/python-dev/2008-January/076626.html and issue
1965.
........
r60487 | jeffrey.yasskin | 2008-02-01 08:05:46 +0100 (Fri, 01 Feb 2008) | 3 lines
Roll back r60248. It's useful to encourage users not to change Rational
instances.
........
r60488 | neal.norwitz | 2008-02-01 08:22:59 +0100 (Fri, 01 Feb 2008) | 1 line
Fix refleak
........
Diffstat (limited to 'Lib/rational.py')
-rwxr-xr-x | Lib/rational.py | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/Lib/rational.py b/Lib/rational.py index 06002a3..55d4a41 100755 --- a/Lib/rational.py +++ b/Lib/rational.py @@ -42,7 +42,7 @@ class Rational(RationalAbc): """ - __slots__ = ('numerator', 'denominator') + __slots__ = ('_numerator', '_denominator') # We're immutable, so use __new__ not __init__ def __new__(cls, numerator=0, denominator=1): @@ -92,8 +92,8 @@ class Rational(RationalAbc): raise ZeroDivisionError('Rational(%s, 0)' % numerator) g = gcd(numerator, denominator) - self.numerator = int(numerator // g) - self.denominator = int(denominator // g) + self._numerator = int(numerator // g) + self._denominator = int(denominator // g) return self @classmethod @@ -167,6 +167,14 @@ class Rational(RationalAbc): result = new return result + @property + def numerator(a): + return a._numerator + + @property + def denominator(a): + return a._denominator + def __repr__(self): """repr(self)""" return ('Rational(%r,%r)' % (self.numerator, self.denominator)) @@ -192,20 +200,20 @@ class Rational(RationalAbc): Rational, that means that we define __add__ and __radd__ as: def __add__(self, other): + # Both types have numerators/denominator attributes, + # so do the operation directly if isinstance(other, (int, Rational)): - # Do the real operation. return Rational(self.numerator * other.denominator + other.numerator * self.denominator, self.denominator * other.denominator) - # float and complex don't follow this protocol, and - # Rational knows about them, so special case them. + # float and complex don't have those operations, but we + # know about those types, so special case them. elif isinstance(other, float): return float(self) + other elif isinstance(other, complex): return complex(self) + other - else: - # Let the other type take over. - return NotImplemented + # Let the other type take over. + return NotImplemented def __radd__(self, other): # radd handles more types than add because there's @@ -218,8 +226,7 @@ class Rational(RationalAbc): return float(other) + float(self) elif isinstance(other, Complex): return complex(other) + complex(self) - else: - return NotImplemented + return NotImplemented There are 5 different cases for a mixed-type addition on |