在创建 pydantic 对象时触发函数

Triggering a function on creation of an pydantic object

每当我创建/实例化一个 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

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

这可行,但我必须解决问题,这就是为什么我会对更清洁的解决方案感兴趣:

  1. 我基本上不做验证(return相同的值)。
  2. 我想这个函数也会在对象改变时执行,我不希望这样。

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

您可以使用 python dataclass __post_init__:

from pydantic.dataclasses import dataclass

@dataclass
class PydanticClass:
    name: str

    def __post_init__(self):
        print("Post init")

pc = PydanticClass(name="Test")
print(pc)

post_init__init__ 之后调用一次,因此在对 class 实例进行更改后不会调用它。

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

from pydantic import BaseModel


class PydanticClass(BaseModel):
  name: str

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