Register decimals as numbers.Number

This commit is contained in:
Raymond Hettinger 2009-02-03 03:37:03 +00:00
parent 4a1b62a555
commit 2c8585b0af
2 changed files with 14 additions and 0 deletions

View File

@ -136,6 +136,7 @@ __all__ = [
import copy as _copy import copy as _copy
import math as _math import math as _math
import numbers as _numbers
try: try:
from collections import namedtuple as _namedtuple from collections import namedtuple as _namedtuple
@ -3608,6 +3609,12 @@ def _dec_from_triple(sign, coefficient, exponent, special=False):
return self return self
# Register Decimal as a kind of Number (an abstract base class).
# However, do not register it as Real (because Decimals are not
# interoperable with floats).
_numbers.Number.register(Decimal)
##### Context class ####################################################### ##### Context class #######################################################

View File

@ -30,6 +30,7 @@ import os, sys
import pickle, copy import pickle, copy
import unittest import unittest
from decimal import * from decimal import *
import numbers
from test.test_support import (TestSkipped, run_unittest, run_doctest, from test.test_support import (TestSkipped, run_unittest, run_doctest,
is_resource_enabled) is_resource_enabled)
import random import random
@ -1334,6 +1335,12 @@ class DecimalUsabilityTest(unittest.TestCase):
class DecimalPythonAPItests(unittest.TestCase): class DecimalPythonAPItests(unittest.TestCase):
def test_abc(self):
self.assert_(issubclass(Decimal, numbers.Number))
self.assert_(not issubclass(Decimal, numbers.Real))
self.assert_(isinstance(Decimal(0), numbers.Number))
self.assert_(not isinstance(Decimal(0), numbers.Real))
def test_pickle(self): def test_pickle(self):
d = Decimal('-3.141590000') d = Decimal('-3.141590000')
p = pickle.dumps(d) p = pickle.dumps(d)