对 NewType 的 Pydantic 检查

Pydantic Checks on NewType

我为项目创建了一个带有约束的新类型。 (我知道,这个类型本身真的一点都不好,但是现在,就这么用了)

from typing import NewType
from pydantic import conlist, PositiveFloat    
PositionType = NewType('PositionType', conlist(PositiveFloat, min_items=2, max_items=2))

如果我创建一个新的错误类型实例,我不会收到任何错误

test = PositionType([2,-4])

但是,如果我创建一个使用此类型的 BaseModel 实例,我会收到预期的错误。

from pydantic import BaseModel
from typing import List
class TestClass(BaseModel):
    list_of_positions : List[PositionType]

test = TestClass(list_of_positions=[test])

我希望能够在使用 PositionType 的新实例时检查是否正确创建了新对象。任何想法如何?我找不到 运行 pydantic 的装饰器/选项 (我在 Python3.10)

经过一段时间的研究,我最终得到了这个解决方案: Pydantic 允许为 classes:

定义自定义根类型
from typing import NewType
from pydantic import conlist, PositiveFloat    
from pydantic import BaseModel
PositionType = NewType('PositionType', conlist(PositiveFloat, min_items=2, max_items=2))


class PositionClass(BaseModel):
    __root__: PositionType
    
test = PositionClass.parse_obj([2, -4])

__root__ 设置为我的新类型时,我得到一个与我的 NewType 基本相同的 class。仅在调用 PositionClass() 时,我需要将 __root__ 作为参数传递或使用每个 pydantic class 具有的 parse_obj 函数。

现在我得到了我想要的错误消息(尽管我对必须将 __root__ 传递给构造函数并不完全满意)