How to annotate a type that's a class object (instead of a class instance)? How to annotate a type that's a class object (instead of a class instance)? python python

How to annotate a type that's a class object (instead of a class instance)?


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 Typeclass Foo: ...class Bar(Foo): ...class Baz: ...some_class: Type[Foo]some_class = Foo # oksome_class = Bar # oksome_class = Baz # errorsome_class = Foo() # error

Note that Type[Union[Foo, Bar, Baz]] and Union[Type[Foo], Type[Bar], Type[Baz]] are completely equivalent.

If 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.