我已经为一个项目创建了一个带有约束的新类型。(我知道,这种类型本身一点也不好,但现在,这正是我们所使用的)
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上)
发布于 2022-05-19 17:33:51
在研究了一段时间之后,我得到了这样的解决方案: Pydantic允许为类定义自定义根类型:
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基本相同的类。只有在调用PositionClass()时,我才需要将__root__作为参数传递,或者使用每个pydantic类都具有的parse_obj函数。
现在,我得到了我想要的错误消息(尽管我不完全满意必须将__root__传递给构造函数)
https://stackoverflow.com/questions/72268685
复制相似问题