You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:25:38