mirror of
https://github.com/python/cpython.git
synced 2025-11-25 04:34:37 +00:00
Add rational.Rational as an implementation of numbers.Rational with infinite
precision. This has been discussed at http://bugs.python.org/issue1682. It's useful primarily for teaching, but it also demonstrates how to implement a member of the numeric tower, including fallbacks for mixed-mode arithmetic. I expect to write a couple more patches in this area: * Rational.from_decimal() * Rational.trim/approximate() (maybe with different names) * Maybe remove the parentheses from Rational.__str__() * Maybe rename one of the Rational classes * Maybe make Rational('3/2') work.
This commit is contained in:
parent
ca9c6e433c
commit
d7b00334f3
6 changed files with 777 additions and 313 deletions
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
TODO: Fill out more detailed documentation on the operators."""
|
||||
|
||||
from __future__ import division
|
||||
from abc import ABCMeta, abstractmethod, abstractproperty
|
||||
|
||||
__all__ = ["Number", "Exact", "Inexact",
|
||||
|
|
@ -63,7 +64,8 @@ class Complex(Number):
|
|||
def __complex__(self):
|
||||
"""Return a builtin complex instance. Called for complex(self)."""
|
||||
|
||||
def __bool__(self):
|
||||
# Will be __bool__ in 3.0.
|
||||
def __nonzero__(self):
|
||||
"""True if self != 0. Called for bool(self)."""
|
||||
return self != 0
|
||||
|
||||
|
|
@ -98,6 +100,7 @@ class Complex(Number):
|
|||
"""-self"""
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def __pos__(self):
|
||||
"""+self"""
|
||||
raise NotImplementedError
|
||||
|
|
@ -122,12 +125,28 @@ class Complex(Number):
|
|||
|
||||
@abstractmethod
|
||||
def __div__(self, other):
|
||||
"""self / other; should promote to float or complex when necessary."""
|
||||
"""self / other without __future__ division
|
||||
|
||||
May promote to float.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def __rdiv__(self, other):
|
||||
"""other / self"""
|
||||
"""other / self without __future__ division"""
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def __truediv__(self, other):
|
||||
"""self / other with __future__ division.
|
||||
|
||||
Should promote to float when necessary.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def __rtruediv__(self, other):
|
||||
"""other / self with __future__ division"""
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue