如何从Pydantic Dataclass中获取含FieldInfo的字段字典?
获取Pydantic Dataclass的字段信息(类似BaseModel的model_fields)
当使用Pydantic的BaseModel时,类或实例都能通过model_fields属性拿到包含字段名与FieldInfo的字典,但用@dataclass装饰器创建的数据类没有这个属性,你可以通过以下方法获取同结构的字段信息:
方法1:直接访问类的__pydantic_fields__属性
Pydantic dataclass的类本身自带__pydantic_fields__属性,返回结构和BaseModel.model_fields完全一致,类型为dict[str, FieldInfo]。
示例代码:
from pydantic.dataclasses import dataclass from pydantic import Field @dataclass class Person: first_name: str = Field(alias='firstName') age: int # 从类获取字段信息 field_info = Person.__pydantic_fields__ print(field_info)
输出结果:
{'first_name': FieldInfo(annotation=str, required=True, alias='firstName', alias_priority=2), 'age': FieldInfo(annotation=int, required=True)}
方法2:从实例间接获取
如果需要从已创建的实例出发,可通过实例的__class__属性访问类的__pydantic_fields__:
p = Person(firstName='John', age=42) field_info = p.__class__.__pydantic_fields__
这个属性包含的字段信息和BaseModel.model_fields完全匹配,能拿到字段注解、别名、必填状态等所有你需要的FieldInfo内容。
内容的提问来源于stack exchange,提问作者Michal
相关产品推荐
相关产品推荐

