title: Python typing Union of class and it's instance
body: <p>Say I have</p>
  
  <pre><code>class Foo:
     pass
  </code></pre>
  
  <p>and I want to write a function that may accept Foo instance or some of Foo subclasses (not instances). So I wrote</p>
  
  <pre><code>def bar(o: Union[Foo, Type[Foo]]):
      print(1)
  </code></pre>
  
  <p>And get such errors:</p>
  
  <pre><code>TypeError                                 Traceback (most recent call last) &lt;ipython-input-161-2a8355efa688&gt; in &lt;module&gt;()
  ----&gt; 1 def bar(o: Union[Foo, Type[Foo]]):
        2     print(1)
        3 
  
  /usr/lib/python3.5/typing.py in __getitem__(self, parameters)
      550             parameters = (parameters,)
      551         return self.__class__(self.__name__, self.__bases__,
  --&gt; 552                               dict(self.__dict__), parameters, _root=True)
      553 
      554     def __eq__(self, other):
  
  /usr/lib/python3.5/typing.py in __new__(cls, name, bases, namespace, parameters, _root)
      510                 continue
      511             if any(isinstance(t2, type) and issubclass(t1, t2)
  --&gt; 512                    for t2 in all_params - {t1} if not isinstance(t2, TypeVar)):
      513                 all_params.remove(t1)
      514         # It's not a union if there's only one type left.
  
  /usr/lib/python3.5/typing.py in &lt;genexpr&gt;(.0)
      510                 continue
      511             if any(isinstance(t2, type) and issubclass(t1, t2)
  --&gt; 512                    for t2 in all_params - {t1} if not isinstance(t2, TypeVar)):
      513                 all_params.remove(t1)
      514         # It's not a union if there's only one type left.
  
  /usr/lib/python3.5/typing.py in __subclasscheck__(self, cls)    1075   return True    1076                 # If we break out of the loop, the superclass gets a chance.
  -&gt; 1077         if super().__subclasscheck__(cls):    1078             return True    1079         if self.__extra__ is None or isinstance(cls, GenericMeta):
  
  /home/alexey/dev/gcore/django/lib/python3.5/abc.py in
  __subclasscheck__(cls, subclass)
      223                 return True
      224         # Check if it's a subclass of a subclass (recursive)
  --&gt; 225         for scls in cls.__subclasses__():
      226             if issubclass(subclass, scls):
      227                 cls._abc_cache.add(subclass)
  
  TypeError: descriptor '__subclasses__' of 'type' object needs an argument
  </code></pre>
  
  <p>Is it impossible to specify that type in python, or I used wrong approach?</p>