当前位置: 首页 > news >正文

Pydantic:校验器(@validator)、模型嵌套、模型继承

📚 1. 校验器(@validator)

Pydantic 允许你自定义字段验证逻辑。用 @validator 装饰器可以在字段赋值时自动进行检查或修改。

例子:

from pydantic import BaseModel, validatorclass User(BaseModel):name: strage: int@validator('name')def name_must_not_be_empty(cls, v):if not v.strip():raise ValueError('Name must not be empty')return v.title()  # 自动转为首字母大写@validator('age')def age_must_be_positive(cls, v):if v <= 0:raise ValueError('Age must be positive')return v

用法说明:

  • @validator('字段名') 作用于特定字段。
  • 方法的第一个参数是 cls(类本身),第二个是字段值 v
  • 你可以抛出异常来阻止非法数据。
  • 你也可以对值做一些小改动(比如格式化字符串)。

🧩 2. 模型嵌套(Model Nesting)

Pydantic 支持模型里嵌套模型,非常适合表示复杂的数据结构。

例子:

from pydantic import BaseModelclass Address(BaseModel):city: strzip_code: strclass User(BaseModel):name: straddress: Addressuser = User(name='Tom',address={'city': 'New York','zip_code': '10001'}
)print(user.address.city)   # 自动解析成 Address 类型

用法说明:

  • 在外部模型中,直接把字段的类型定义为另一个 BaseModel 子类。
  • 输入时可以直接传字典,Pydantic 会自动转成子模型。

🏗️ 3. 模型继承(Model Inheritance)

Pydantic 的模型支持继承,就像 Python 的普通类一样。
你可以用基类定义通用字段,然后子类扩展或修改。

例子:

from pydantic import BaseModelclass Person(BaseModel):name: strage: intclass Employee(Person):employee_id: strclass Manager(Employee):department: strm = Manager(name='Alice', age=30, employee_id='E123', department='HR')print(m)

用法说明:

  • 子类会继承父类的所有字段。
  • 可以继续添加新的字段或重写验证逻辑。
  • 适合复杂系统中统一管理基础字段,比如 “用户通用信息”、“商品通用信息”。

🔥 总结一句话:

@validator 用来自定义字段验证,模型嵌套用来组合结构复杂的数据,模型继承用来复用字段和逻辑。

相关文章:

  • 使用cesium设置第一视角
  • openharmony—4.1 softbus_tool 工具编译使用测试笔记(持续更新)
  • ubuntu 安装ollama后,如何让外网访问?
  • 基于QT(C++)实现(GUI)旅行查询与模拟系统
  • 展销编辑器在未来的发展前景​
  • python 取出字串中的所有词
  • C++:迭代器失效问题
  • 东田数码科技前端面经
  • 利用 Python 爬虫按关键字搜索 1688 商品详情:实战指南
  • (leetcode)力扣100 1.两数之和(两种方法:O(nlogn)/O(n))
  • Go 语言中的 `select` 语句详解
  • 30、不是说字符串是不可变的吗,string s=“abc“;s=“123“不就是变了吗?
  • 【C++】C++11新特性(一)
  • nextjs整合快速整合市面上各种AI进行prompt连调测试
  • 【Java二分查找】
  • Linux(Centos版本)中安装Docker
  • 在CentOS 8上在线安装Docker
  • 1到12月和1到31日英文表达
  • R中实现数值求导的包numDeriv
  • Web服务器技术选型指南:主流方案、核心对比与策略选择
  • 物业也能成为居家养老“服务员”,上海多区将开展“物业+养老”试点
  • 中消协发布“五一”消费提示:践行“光盘行动”,抵制餐饮浪费
  • 国家发展改革委:我们对实现今年经济社会发展目标任务充满信心
  • 四川苍溪县教育局通报“工作人员辱骂举报学生”:停职检查
  • 伊朗南部港口火势蔓延,部分集装箱再次发生爆炸
  • 伊朗阿巴斯港港口爆炸已致47人受伤