如何将Python字典键作为Pydantic模型字段通过点运算符访问
这个需求完全可以实现,你遇到的报错是因为Python的类型注解仅作标注用途,不会自动触发类型转换:你向函数传入的依然是原生字典对象,字典本身不支持通过点运算符访问键,才会抛出AttributeError。
具体修改方案
方案1:调用函数时手动将字典转为Pydantic模型实例
传参时用字典解包构造Person实例即可,修改后的代码如下:
from pydantic import BaseModel class Person(BaseModel): name: str age: int def some_function(data: Person): abc = data.name print(abc) person = {'name':'tom','age':12} # 手动构造Person实例后传入 some_function(Person(**person))
如果你使用的是Pydantic V2版本,更推荐用model_validate方法做转换,对嵌套结构、字段校验的兼容性更好:
some_function(Person.model_validate(person))
方案2:函数内部自动兼容字典输入
如果不想改动调用侧的传参逻辑,可以在函数内部先做类型转换,同时适配字典和模型实例两种输入:
from pydantic import BaseModel class Person(BaseModel): name: str age: int def some_function(data: Person | dict): # 输入为字典时自动转成Person实例 if isinstance(data, dict): data = Person.model_validate(data) abc = data.name print(abc) person = {'name':'tom','age':12} # 可直接传入字典 some_function(person)
内容的提问来源于stack exchange,提问作者Naxi
相关产品推荐
相关产品推荐

