python-3.x 在创建pydantic对象时触发函数

ohfgkhjo  于 2023-02-06  发布在  Python
关注(0)|答案(2)|浏览(134)

无论何时创建/示例化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")上执行我的逻辑并简单地返回相同的对象值。
这是可行的,但我有两个问题,这就是为什么我会有兴趣在一个更清洁的解决方案:
1.我基本上不做验证(返回相同的值)。
1.我认为一旦对象发生变化,这个函数也会执行,这是我不希望的。
所以我很乐意了解任何更好的方法/解决方案。

xxls0lw8

xxls0lw81#

您的意图并不完全清楚,但我可以建议使用一个覆盖__init__模型方法,在这种情况下,您的代码将在对象示例化时执行一次:

from pydantic import BaseModel

class PydanticClass(BaseModel):
  name: str

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

o3imoua42#

你可以使用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__之后调用一次,因此在对类示例进行更改后不会调用它。

相关问题