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

Python中如何获取类的字段类型,用作类型注解实现mypy校验

Python 获取类字段类型用作类型注解的解决方案

你原有写法中A.field无法直接使用的原因是:dataclass装饰后的类直接访问A.field得到的是dataclasses.Field实例,并非你声明的str类型,因此不能直接当作类型注解使用。你可以根据场景选择以下实现方案:

方案1:提取公共类型别名(静态检查全兼容,最推荐)

直接将字段类型提前定义为公共别名,类定义和后续变量注解都复用这个别名即可,所有静态检查器(mypy、pyright等)都能完美识别:

import dataclasses
from typing import TypeAlias

# 提前定义字段类型别名
AFieldType: TypeAlias = str

@dataclasses.dataclass
class A:
  field: AFieldType

def main() -> None:
  value: AFieldType = 123  # mypy会直接报错:int类型无法赋值给str类型

如果你希望用A.xxx的形式引用类型,也可以把别名定义在类内部:

import dataclasses
from typing import TypeAlias

@dataclasses.dataclass
class A:
  field: str
  # 内部定义字段类型别名
  FieldType: TypeAlias = str

def main() -> None:
  value: A.FieldType = 123  # mypy同样可以识别到类型不匹配

方案2:运行时动态获取字段类型

如果你是运行时需要做类型校验,可以通过get_type_hints或者dataclasses.fields动态拿到字段类型:

import dataclasses
from typing import get_type_hints

@dataclasses.dataclass
class A:
  field: str

# 运行时获取字段类型
field_type = get_type_hints(A)["field"]
print(field_type)  # 输出 <class 'str'>

注意:动态获取的类型仅能在运行时使用,无法作为静态类型注解被mypy等检查器识别。

内容的提问来源于stack exchange,提问作者edA-qa mort-ora-y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:09:04