How to type hint a generic numeric type in Python?

11,613

Solution 1

PEP 3141 added abstract base classes for numbers, so you could use:

from numbers import Number

def foo(a: Number) -> Number:
    ...

Solution 2

There isn't a generic numeric type in the typing module, so you would have to create such a type with Union instead:

from typing import Union

numeric = Union[int, float, complex]

...

To add support for Numpy's collection of numeric types, add np.number to that Union.

numeric = Union[int, float, complex, np.number]
Share:
11,613
Francesco Boi
Author by

Francesco Boi

Interested in programming, electronic, math, physics and technology. In my free-time I like playing sports, going to the sea, watching movies and reading.

Updated on June 03, 2022

Comments

  • Francesco Boi
    Francesco Boi about 2 years

    Forgive me if this question has been asked before but I could not find any related answer.

    Consider a function that takes a numerical type as input parameter:

    def foo(a):
        return ((a+1)*2)**4;
    

    This works with integers, floats and complex numbers.

    Is there a basic type so that I can do a type hinting (of a real existing type/base class), such as:

    def foo(a: numeric):
        return ((a+1)*2)**4;
    

    Furthermore I need to use this in a collection type parameter, such as:

    from typing import Collection;
    def foo(_in: Collection[numeric]):
        return ((_in[0]+_in[1])*2)**4;