title: How to hint at number *types* (i.e. subclasses of Number) - not numbers themselves?
body: <p>Assuming I want to write a function that accepts any type of number in Python, I can annotate it as follows:</p>
  <pre class="lang-py prettyprint-override"><code>from numbers import Number
  
  def foo(bar: Number):
      print(bar)
  </code></pre>
  <p>Taking this concept one step further, I am writing functions which accept number types, i.e. <code>int</code>, <code>float</code> or <code>numpy</code> dtypes, as arguments. Currently, I am writing:</p>
  <pre class="lang-py prettyprint-override"><code>from typing import Type
  
  def foo(bar: Type):
      assert issubclass(bar, Number)
      print(bar)
  </code></pre>
  <p>I thought I could substitute <code>Type</code> with something like <code>NumberType</code> (similar to <code>NotImplementedType</code> and friends, <a href="https://bugs.python.org/issue41810" rel="noreferrer">re-introduced in Python 3.10</a>), because all number types are subclasses of <code>Number</code>:</p>
  <pre class="lang-py prettyprint-override"><code>from numbers import Number
  import numpy as np
  
  assert issubclass(int, Number)
  assert issubclass(np.uint8, Number)
  </code></pre>
  <p>As it turns out (or at least as far as I can tell), there is no such thing as a generic <code>NumberType</code> in Python (3.9):</p>
  <pre class="lang-py prettyprint-override"><code>&gt;&gt;&gt; type(Number)
  abc.ABCMeta
  </code></pre>
  <p>Is there a clean way (i.e. without runtime checks) to achieve the desired kind of annotation?</p>