Python类型提示中如何指定字面特定类型(如str类本身而非实例)
在Python中指定变量为字面特定类型的方法
基础场景:严格指定变量为某类型本身
你提到的var: str是指定变量为字符串实例,var: type[str]允许变量为str类或它的子类。如果要严格限制变量只能是str类本身(不能是子类),可以用Literal类型实现:
from typing import Literal # 严格指定变量为str类本身 var: Literal[str] = str
要是给这个变量赋值str的子类(比如自定义的继承str的类),类型检查器会直接报错,完全符合你要的“字面特定类型”要求。
Union场景:限制参数/返回值为多个类型本身
如果希望函数的参数或返回值只能是int类或str类本身(而非它们的实例),直接把Literal[int]和Literal[str]用Union组合即可:
参数示例
from typing import Literal def example1(arg: Literal[int] | Literal[str]): print(arg.__name__) # 合法调用 example1(int) example1(str) # 非法调用(类型检查器报错) example1(123) # 这是int的实例,不是int类本身 example1(type("MyStr", (str,), {})) # 这是str的子类,不是str本身
返回值示例
from typing import Literal def example2(arg: bool) -> Literal[int] | Literal[str]: return int if arg else str # 合法返回 print(example2(True)) # 输出 <class 'int'> print(example2(False)) # 输出 <class 'str'>
注意事项
Literal需要从typing模块导入(Python 3.8+支持),Python 3.10+可以直接使用,也可以通过from __future__ import annotations提前启用新语法。- 这种写法依赖类型检查器(比如mypy、pyright)生效,Python解释器本身不会做运行时检查,如果需要运行时验证,得自行添加判断逻辑。
内容的提问来源于stack exchange,提问作者user18798042
相关产品推荐
相关产品推荐

