是否有可能有一个 pydantic 模型,我可以在运行时以某种方式传递其中一个变量的数据类型?我尝试过阅读,但我无法理解 Pydantic 的工作原理。我本质上需要数据类型强制,在分配期间也是如此。我希望有一些东西可以做这样的事情:
class State(BaseModel):
datatype: type,
value: self.datatype,
getter: Callable
setter: Callable
state1 = State(bool, True, get_state1, set_state1)
state2 = State(int, 0, get_state2, set_state2)
state1.value = 7 # this should throw error, expected datatype of state1 is bool
思考这里有两个独立的问题:
要启用验证分配,您可以使用特定的配置选项。请参阅https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.validate_assignment
关于 (2),我认为 Pydantic 并不是真正为在运行时处理类型定义而设计的。Pydantic 的重点是预先定义类型,然后 Pydantic 构建一次模型架构并使用它在运行时进行验证。但是,如果您有充分的理由这样做,则有多种选择可以实现这一目标。
首先,您可以通过定义自定义来模仿该行为
field_validator
。然后在字段验证器中使用 aTypeValidator
来触发类型验证。然而,重要的是,这仅适用于小型模型,因为TypeValidator
每次调用验证时都会在创建时构建模式并重建。结合该
validate_assignment=True
选项,您将获得以下内容:这恰恰引发了:
或者,您可以考虑在运行时创建整个模型。对于此 Pydantic 提供动态模型创建,请参阅https://docs.pydantic.dev/latest/concepts/models/#dynamic-model-creation
我希望这有帮助!