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

Pydantic模型初始化后修改字段时能否执行验证?

Pydantic模型初始化后修改字段的验证问题

默认情况下,直接给Pydantic模型实例的字段赋值时,不会自动触发字段验证和类型转换,这就是你代码里test.test = "10"后,字段类型变成str而不是被转成int的原因。

要实现初始化后修改字段仍执行验证,分版本处理:

Pydantic V2

在模型类里通过model_config开启赋值验证:

import pydantic as pdc

class Test(pdc.BaseModel):
    test: int | None
    model_config = {"validate_assignment": True}

test = Test(test=None)
test.test = "10"
print(type(test.test))  # 输出 <class 'int'>

Pydantic V1

有几种方式可以实现验证:

方法1:开启类级别的赋值验证

给模型添加validate_assignment = True类属性,开启自动赋值验证:

from pydantic import BaseModel

class Test(BaseModel):
    test: int | None
    validate_assignment = True

test = Test(test=None)
test.test = "10"
print(type(test.test))  # 输出 <class 'int'>

方法2:使用update方法修改字段

通过update方法传入字段字典,触发验证:

from pydantic import BaseModel

class Test(BaseModel):
    test: int | None

test = Test(test=None)
test.update({"test": "10"})
print(type(test.test))  # 输出 <class 'int'>

方法3:手动重新实例化触发验证

将现有实例转成字典后重新初始化模型,强制验证:

from pydantic import BaseModel

class Test(BaseModel):
    test: int | None

test = Test(test=None)
test.test = "10"
test = Test(**test.dict())
print(type(test.test))  # 输出 <class 'int'>

内容的提问来源于stack exchange,提问作者Jossy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:08:11