要注释作为类的对象,请使用typing.Type
。例如,这将告诉类型检查器some_class
是类Foo
或其任何子类:
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]]
和Union[Type[Foo], Type[Bar], Type[Baz]]
完全等效。
如果some_class
可以是多个类中的任何一个,则可能需要使它们全部继承自相同的基类,并使用Type[BaseClass]
。请注意,目前该继承必须是非虚拟的(正在讨论对虚拟继承的mypy支持)。
编辑以确认Type[Union[...
允许。