应使用 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)
兼容旧版本(Py3.8 及以下)
在 Python 3.8 或需支持 typing_extensions 的场景中,改用 typing.Type[T]:
from typing import Type-
def func(cls: Type[MyClass]) -> MyClass:表示参数cls是MyClass类(或其子类) -
Type在 Py3.9+ 中仍可用,但官方推荐迁移到type[T]
常见误标与对比
注意区分以下三种写法:
这本书给出了一份关于python这门优美语言的精要的参考。作者通过一个完整而清晰的入门指引将你带入python的乐园,随后在语法、类型和对象、运算符与表达式、控制流函数与函数编程、类及面向对象编程、模块和包、输入输出、执行环境等多方面给出了详尽的讲解。如果你想加入 python的世界,David M beazley的这本书可不要错过哦。 (封面是最新英文版的,中文版貌似只译到第二版)
-
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") # ❌ 类型检查报错









