Search code examples
pythonnumpyduck-typingdynamic-typing

How to identify numpy types in python?


How can one reliably determine if an object has a numpy type?

I realize that this question goes against the philosophy of duck typing, but idea is to make sure a function (which uses scipy and numpy) never returns a numpy type unless it is called with a numpy type. This comes up in the solution to another question, but I think the general problem of determining if an object has a numpy type is far enough away from that original question that they should be separated.


Solution

  • Use the builtin type function to get the type, then you can use the __module__ property to find out where it was defined:

    >>> import numpy as np
    a = np.array([1, 2, 3])
    >>> type(a)
    <type 'numpy.ndarray'>
    >>> type(a).__module__
    'numpy'
    >>> type(a).__module__ == np.__name__
    True