## Question

Asked By – Claudiu

Given an arbitrary python object, what’s the best way to determine whether it is a number? Here `is`

is defined as `acts like a number in certain circumstances`

.

For example, say you are writing a vector class. If given another vector, you want to find the dot product. If given a scalar, you want to scale the whole vector.

Checking if something is `int`

, `float`

, `long`

, `bool`

is annoying and doesn’t cover user-defined objects that might act like numbers. But, checking for `__mul__`

, for example, isn’t good enough because the vector class I just described would define `__mul__`

, but it wouldn’t be the kind of number I want.

**Now we will see solution for issue: What is the most pythonic way to check if an object is a number? **

## Answer

Use `Number`

from the `numbers`

module to test `isinstance(n, Number)`

(available since 2.6).

```
>>> from numbers import Number
... from decimal import Decimal
... from fractions import Fraction
... for n in [2, 2.0, Decimal('2.0'), complex(2, 0), Fraction(2, 1), '2']:
... print(f'{n!r:>14} {isinstance(n, Number)}')
2 True
2.0 True
Decimal('2.0') True
(2+0j) True
Fraction(2, 1) True
'2' False
```

This is, of course, contrary to duck typing. If you are more concerned about how an object *acts* rather than what it *is*, perform your operations as if you have a number and use exceptions to tell you otherwise.

This question is answered By – Steven Rumbalski

**This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 **