Skip to content

第十章:模型继承与泛型 ​

10.1 继承:DRY 原则 ​

python
class BaseUser(BaseModel):
    model_config = ConfigDict(str_strip_whitespace=True)
    name: str

class AdminUser(BaseUser):       # 继承字段 + 配置 + 验证器
    permissions: list[str]

继承会带走父类的一切:字段、配置、验证器。非常适合做"公共字段抽基类"。

10.2 泛型模型:标准化的接口响应 ​

后端接口常见的统一返回格式,用泛型写一次就够了:

python
from typing import Generic, TypeVar
from pydantic import BaseModel

T = TypeVar("T")

class ApiResponse(BaseModel, Generic[T]):
    code: int
    message: str
    data: T | None = None

class User(BaseModel):
    name: str

# 使用时指定具体类型
resp = ApiResponse[User].model_validate({
    "code": 0, "message": "ok", "data": {"name": "小明"}
})
print(resp.data.name)   # 小明 —— data 被校验成了 User 类型!

泛型让 data 字段既能复用外壳,又能享受完整的类型校验和 IDE 提示。