创建 pydantic 对象时触发函数

ray*_*yon 6 python python-3.x pydantic

每当我创建/实例化 pydantic 对象时,是否有一种干净的方法来触发函数调用?

目前我正在root_validator为此“滥用”:

from pydantic import BaseModel

class PydanticClass(BaseModel):
  name: str

  @root_validator()
  def on_create(cls, values):
    print("Put your logic here!")
    return values
Run Code Online (Sandbox Code Playgroud)

因此PydanticClass(name="Test")执行我的逻辑并简单地返回相同的对象值。

这可行,但我有两个问题,这就是为什么我对更干净的解决方案感兴趣:

  1. 我基本上不进行验证(返回相同的值)。
  2. 我认为一旦对象发生更改,这个函数也会被执行,这是我不想要的。

所以我很高兴了解任何更好的方法/解决方案。

ale*_*ame 11

你的意图并不完全清楚。但我可以建议重写__init__模型方法。在这种情况下,您的代码将在对象实例化时执行一次:

from pydantic import BaseModel


class PydanticClass(BaseModel):
  name: str

  def __init__(self, **data) -> None:
      super().__init__(**data)
      print("Put your logic here!")
Run Code Online (Sandbox Code Playgroud)