[issue43602] Include Decimal's in numbers.Real

Raymond Hettinger report at bugs.python.org
Tue Mar 23 03:35:30 EDT 2021


Raymond Hettinger <raymond.hettinger at gmail.com> added the comment:

We don't have a choice here.  Operations between decimals and floats raise a TypeError.  So, we can't register Decimal as a Real; otherwise, static type checking wouldn't be able to flag the following as invalid:

    def add(a: Real, b: Real) -> Real:
        return a + b

    a: Real = Decimal('1.1')
    b: Real = 2.2
    print(add(a, b))

This gives:

    Traceback (most recent call last):
      File "/Users/raymond/Documents/tmp.py", line 10, in <module>
        print(add(a, b))
      File "/Users/raymond/Documents/tmp.py", line 6, in add
        return a + b
    TypeError: unsupported operand type(s) for +: 'decimal.Decimal' and 'float'

Almost the whole point of static checking is early detection of these problems so we won't encounter the TypeError at runtime.

P.S.  With respect to #4, we've harmonized the APIs as much as we sensibly can.  That allows some code to be more polymorphic as long at the type is consistent throughout.  That is much different than freely mixing floats and decimals in the direct interactions.

----------

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue43602>
_______________________________________


More information about the Python-bugs-list mailing list