如何在实例化Pydantic对象时自动触发函数?求更优实现方案
方案1:通用方案(适配Pydantic v1、v2全版本)
直接重写模型的__init__方法,在调用父类初始化逻辑后执行你需要的自定义逻辑,该逻辑只会在实例创建时触发,后续修改对象属性不会执行:
from pydantic import BaseModel class PydanticClass(BaseModel): name: str def __init__(self, **kwargs): # 先执行Pydantic原生的初始化校验逻辑 super().__init__(**kwargs) # 下方写你需要执行的自定义逻辑 print("Put your logic here!")
方案2:Pydantic v2 专属优雅方案
Pydantic v2 官方提供了@model_post_init装饰器,专门用于定义模型实例化完成后需要执行的逻辑,完全符合你的使用场景,没有误用校验器的问题:
from pydantic import BaseModel, model_post_init class PydanticClass(BaseModel): name: str @model_post_init def run_after_init(self): # 自定义逻辑仅在实例创建时执行一次 print("Put your logic here!")
两种方案都可以解决你之前遇到的两个问题:
- 没有误用校验器能力,两种写法都是官方推荐的自定义初始化逻辑实现方式
- 逻辑仅在实例化时执行,后续修改对象属性、调用对象更新/复制方法都不会重复触发
内容的提问来源于stack exchange,提问作者rayon
相关产品推荐
相关产品推荐

