如何配置Pydantic模型,使未提供的可选字段不生成属性?
解决Pydantic模型可选字段未传入时不生成属性的问题
要实现未提供age字段时模型实例中完全不存在该属性,可通过Field(default=Undefined)配置,具体代码如下:
from pydantic import BaseModel, Field, Undefined from typing import Optional class Employee(BaseModel): name: str age: Optional[int] = Field(default=Undefined)
关键说明:
- 使用
Undefined作为字段默认值,替代Optional类型隐含的None默认值,初始化时未传入age参数的话,该属性不会被添加到模型实例中,访问时会抛出AttributeError。 - 保留
Optional[int]类型注解的话,允许传入age=None;如果不需要支持传入None,仅允许用户不传或传入合法int值,可将类型注解改为int,同时保留Field(default=Undefined)配置。
测试示例:
# 未传入age的情况 emp_no_age = Employee(name="Alice") print(hasattr(emp_no_age, 'age')) # 输出 False # emp_no_age.age # 执行此行会抛出 AttributeError # 传入age的情况 emp_with_age = Employee(name="Bob", age=30) print(emp_with_age.age) # 输出 30 # 传入age为None的情况(仅当类型为Optional[int]时支持) emp_with_none_age = Employee(name="Charlie", age=None) print(emp_with_none_age.age) # 输出 None
内容的提问来源于stack exchange,提问作者Fusion
相关产品推荐
相关产品推荐

