To annotate an object that is a class, use
typing.Type. For example, this would tell the type checker that
some_class is class
Foo or any of its subclasses:
from typing import Type class Foo: ... class Bar(Foo): ... class Baz: ... some_class: Type[Foo] some_class = Foo # ok some_class = Bar # ok some_class = Baz # error some_class = Foo() # error
Type[Union[Foo, Bar, Baz]] and
Union[Type[Foo], Type[Bar], Type[Baz]] are completely equivalent.
some_class could be any of a number of classes, you may want to make them all inherit from the same base class, and use
Type[BaseClass]. Note that the inheritance must be non-virtual for now (mypy support for virtual inheritance is being discussed).
Edited to confirm that
Type[Union[... is allowed.