Python seems to lacks a base class for "all numbers", e. g. `int`, `float`, `complex`, `long` (in Python2). This is unfortunate and a bit inconvenient to me.

I'm writing a function for matching data types onto each other (a tree matching / searching algorithm). For this I'd like to test the input values for being `list`s, `dict`s, `str`ings, or "numbers". Each of the four cases is handled separately, but I do not want to distinguish between `int`, `long`, `float`, or `complex` (though the latter will probably not appear). This would be rather easy to achieve if all number types would be derived from a base type `number`, but unfortunately, they are not, AFAICS.

This enforcement of explicitness makes it obvious that the unusual `complex` is included. Which typically raises questions which I rather not want to think about. My design rather says "all number types" than that explicit list. I also do not want to explicitly list all possible number types coming from other libraries like `numpy` or similar.

**First question**, rather a theoretical one: Why didn't the designers make all number types inherit a common number base class? Is there a good reason for this, maybe a theory about it which lets it seem not recommended? Or would it make sense to propose this idea for later versions of Python?

**Second question**, the more practical one: Is there a recommended way of checking a value for being a number, maybe a library call I'm not aware of? The straight-forward version of using `isinstance(x, (int, float, complex, long))` does look like a clutch to me, isn't compatible to Python3 which doesn't know a `long` type anymore, and doesn't include library-based number types like `numpy.int32`.