惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
博客园 - 司徒正美
小众软件
小众软件
H
Help Net Security
博客园 - 聂微东
宝玉的分享
宝玉的分享
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
U
Unit 42
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
S
SegmentFault 最新的问题
腾讯CDC
MongoDB | Blog
MongoDB | Blog
云风的 BLOG
云风的 BLOG
J
Java Code Geeks
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Martin Fowler
Martin Fowler
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News

博客园 - 漫思

python使用.env构建开发和生产环境 python项目的构建 nodejs构建CICD时的思考  成为 AI 智能体工程师的 10 个步骤 es6的 yield python 中的 yield 笔记本的A壳 thinkpad 更换 reduce() in Python python的字段赋值和取值的操作 python的语法类似于lodash分组展开,合并分组操作 SelectMany C# lodash 数组的常用做法 lodash里面的常用方法 技术的边界 Reduce 和 Transduce 的含义 尤雨溪创办的 VoidZero 官宣加入 Cloudflare,前端 Vite 等保持开源 Ramda 函数库参考教程 ramda es 数组的方法 flatmap map object.entity的教程 Map与FlatMap:在数据处理中的区别与联系 flat、flatmap与map的用法区别1 flat、flatmap与map的用法区别 AI不是从天而降,它经历了七十年三起三落:读懂AI的第三课 Agent 17 种架构模式 分析 & 思考 只有踩过坑才懂:前端生成唯一 ID,别用 Date.now ()了!试试它crypto.randomUUID() FastAPI python并发 代码是 AI 写的,生产事故谁背锅? AI Agent 走出 Demo 幻觉的唯一解药:Harness Engineering
Python - pydantic 入门介绍与 Models 的简单使用
漫思 · 2026-04-28 · via 博客园 - 漫思

关联问题

换一批

前言

为啥要学这个,因为 FastAPI 是基于它进行开发的,而且是个不错的框架,所以有必要深入学习

前置学习

Python 类型提示:https://cloud.tencent.com/developer/article/1864619

typing 模块:https://cloud.tencent.com/developer/article/1866298

Pydantic 介绍

  • 使用 python 类型注释来进行数据校验和 settings 管理
  • pydantic 可以在代码运行时强制执行类型提示,并在数据校验无效时提供友好的错误提示
  • 定义数据应该如何在规范的 python 代码中保存,然后通过 Python 验证它

Pydantic 安装

代码语言:javascript

AI代码解释

pip install pydantic
测试 pydantic 是否已编译

代码语言:javascript

AI代码解释

import pydantic

print('compiled:', pydantic.compiled)


# 输出结果
compiled: True

Pydantic 注意事项

  • pydantic 是一个解析库,而不是一个验证库
  • 验证是达到目的一种手段,构建符合所提供的类型和约束的模型
  • 简单来说:pydantic 保证输出模型的类型和约束,而不是输入数据

Models

简介
  • 在 pydantic 中定义对象的主要方法是通过模型(模型是从 BaseModel 继承的类)
  • 所有基于 pydantic 的数据类型本质上都是一个 BaseModel 类
  • 可以将模型视为强类型语言中的类型(比如 Java)
  • 不受信任的数据可以传递给模型,经过解析和验证后,pydantic 保证生成的模型实例的字段将符合定义的字段类型(实例字段类型符合类定义的字段类型)
基础模型使用

代码语言:javascript

AI代码解释

from pydantic import BaseModel

class User(BaseModel):
    id: int
    name = "小菠萝测试笔记"
  • User 就是一个模型(Models),有两个字段(属性)
  • id,整数 int 类型,是必传的
  • name,字符串 string 类型,不是必传,有默认值
为什么能知道 name 是 string 类型?

因为默认值是 string 类型,因此不需要类型提示( name : string )

注意:当某些字段没有类型提示时,需要注意有关字段顺序的警告

声明一个有效实例

代码语言:javascript

AI代码解释

user = User(id='123')
  • user 是 User 模型的一个实例对象,就叫模型实例对象吧
  • 对象的初始化会执行所有解析和验证,如果没有抛出 ValidationError,证明生成的模型实例是有效的
访问模型实例对象的属性

代码语言:javascript

AI代码解释

user = User(id='123')
print(user.id, type(user.id))
print(user.name, type(user.name))


# 输出结果
123 <class 'int'>
小菠萝测试笔记 <class 'str'>
  • id 属性传的是字符串 '123',它会根据模型字段类型进行转换为 int
  • name 属性取了默认值
__fields_set__

该变量返回用户初始化对象时提供了什么字段

代码语言:javascript

AI代码解释

# __fields_set__
user = User(id='123')

print(user.__fields_set__ == {'id'})
print(user.__fields_set__ == {'name'})



user = User(id='123', name="test")

print(user.__fields_set__ == {'id', 'name'})
print(user.__fields_set__ == {'id'})


# 输出结果
True
False
True
False
dict()

可以提供字段的字典对象

代码语言:javascript

AI代码解释

# dict()
user = User(id='123')
print(user.dict())
print(dict(user))


# 输出结果
{'id': 123, 'name': '小菠萝测试笔记'}
{'id': 123, 'name': '小菠萝测试笔记'}
修改模型实例对象的属性

代码语言:javascript

AI代码解释

# 修改模型实例属性值
user = User(id='123')
user.id = 321
print(user.id)


# 输出结果
321

BaseModels 属性

其实就是 BaseModels 有什么自带的方法、属性

dict()

返回模型字段和值,字典格式

代码语言:javascript

AI代码解释

user = User(id='123', name="test")
print(user.dict(), type(user.dict()))


# 输出结果
{'id': 123, 'name': 'test'} <class 'dict'>
json()

返回模型字段和值,json 字符串格式

代码语言:javascript

AI代码解释

user = User(id='123', name="test")
print(user.json(), type(user.json()))

# 输出结果
{"id": 123, "name": "test"} <class 'str'>
schema()

以 JSON Schema 形式返回模型,字典格式

代码语言:javascript

AI代码解释

user = User(id='123', name="test")

print(user.schema(), type(user.schema()))


# 输出结果
{
    "title": "User",
    "type": "object",
    "properties": {
        "id": {
            "title": "Id",
            "type": "integer"
        },
        "name": {
            "title": "Name",
            "default": "小菠萝测试笔记",
            "type": "string"
        }
    },
    "required": [
        "id"
    ]
}

<class 'dict'>
schema_json()

以 JSON Schema 形式返回模型,json 字符串格式

代码语言:javascript

AI代码解释

user = User(id='123', name="test")

print(user.schema_json(), type(user.schema_json()))


# 输出结果
{
    "title": "User",
    "type": "object",
    "properties": {
        "id": {
            "title": "Id",
            "type": "integer"
        },
        "name": {
            "title": "Name",
            "default": "小菠萝测试笔记",
            "type": "string"
        }
    },
    "required": [
        "id"
    ]
}

<class 'str'>
copy()

浅拷贝模型对象

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。

原始发表:2021-08-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除