pydantic使用
pydantic的参考文档pydantic使用
pydanitc模板
目标检测框
from pydantic import BaseModel, field_validator, model_validator, Field
from typing import List
class KeyPoint(BaseModel):
    x : int
    y : int
class Box(BaseModel):
    left: int
    top: int
    right: int
    bottom : int
    confidence : float = Field(..., ge=0, le=1)
    label: str
    keyPoints : List[KeyPoint] = Field(default=None)
    @field_validator("left", "top", "right", "bottom", mode='before')
    def ensure_non_negative(cls, v):
        return max(v, 0)
    
    @model_validator(mode='after')
    def ensure_correct_box(self):
        if self.left >= self.right:
            raise ValueError(f"'left' ({self.left}) must be less than 'right' ({self.right}).")
        if self.top >= self.bottom:
            raise ValueError(f"'top' ({self.top}) must be less than 'bottom' ({self.bottom}).")
        return self
    
    @property
    def width(self):
        return self.right - self.left
    @property
    def height(self):
        return self.bottom - self.top
    @property
    def area(self):
        return self.width * self.height
if __name__ == "__main__":
    box = Box(left=100, top=0, right=200, bottom=200, confidence=1.0, label="person")
    print(box)
API 返回
from pydantic import BaseModel
from typing import List, Optional, Generic, TypeVar
T = TypeVar("T")
class APIResponse(BaseModel, Generic[T]):
    success: bool
    data: Optional[List[T]]
    msg: Optional[List[str]]
# 示例用法
if __name__ == "__main__":
    response = APIResponse[dict](success=True, data=[{"key": "value"}], msg=None)
    print(response.model_dump_json())