应使用 type[T](Python 3.9+)或 typing.Type[T](旧版本),表示参数为类对象本身而非其实例,如 type[str] 指 str 类,非字符串实例。
在 Python 类型标注中,要表达“这个参数是类对象(即类型本身)而不是类的实例”,应使用 type[ClassName]。
type[T] 标注类对象Python 3.9+ 原生支持 type[T] 语法,表示“T 类型的类对象”(即 T 的 __class__,如 str、int、自定义类名等)。
type[str] 表示 str 这个类(不是字符串实例),合法值如 str、bytes(若协变允许)、或继承自 str 的类(取决于上下文)type[MyClass] 表示 MyClass 类本身,不是 MyClass()

type[Any](需从 typing 导入 Any)在 Python 3.8 或需支持 typing_extensions 的场景中,改用 typing.Type[T]:
from typing import Typedef func(cls: Type[MyClass]) -> MyClass: 表示参数 cls 是 MyClass 类(或其子类)Type 在 Py3.9+ 中仍可用,但官方推荐迁移到 type[T]
注意区分以下三种写法:
MyClass → 表示 MyClass 的一个实例(最常用)type[MyClass] 或 Type[MyClass] → 表示 MyClass 这个类对象本身Callable[..., MyClass] → 表示一个返回 MyClass 实例的可调用对象,不等于类本身比如写一个工厂函数,接收类并返回其实例:
from typing import type # Py3.9+def create_instance(cls: type[str]) -> str: return cls("hello") # ✅ 合法:str("hello")
调用时传的是类,不是实例
s = create_instance(str) # ✅
create_instance("abc") # ❌ 类型检查报错