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
相关产品推荐
相关产品推荐

