
python的对象增强
| 特性 | TypedDict | Pydantic (BaseModel) |
|---|---|---|
| 核心作用 | 静态类型提示(写代码时防错) | 运行时数据校验与转换(跑代码时防错) |
| 生效时间 | 仅在代码编写/静态检查阶段生效 | 在程序实际运行时生效 |
| 数据校验 | ❌ 无(运行时传错数据也不会报错) | ✅ 强校验(数据不对会直接抛出异常) |
| 数据转换 | ❌ 无 | ✅ 自动转换(如把字符串 "18" 转为数字 18) |
| 底层本质 | 依然是普通的 Python 字典(dict) | 继承自 BaseModel 的专用对象 |
TypedDict
python
from typing import TypedDict
class UserDict(TypedDict):
id: int
name: str
# 在写代码时,IDE 会提示你字典里该有哪些键
user_data: UserDict = {"id": 1, "name": "Alice"}
# ⚠️ 注意:即使你传了错误的数据,程序在运行时也不会报错!
bad_user: UserDict = {"id": "错误地传了字符串", "name": "Bob"}
print(bad_user) # 正常运行,打印出字典Pydantic
py
from pydantic import BaseModel
class UserModel(BaseModel):
id: int
name: str
# ✅ 正常数据,顺利通过
user = UserModel(id=1, name="Alice")
print(user) # 输出: id=1 name='Alice'
# 🔄 自动转换:Pydantic 会把字符串 "2" 自动转成整数 2
converted_user = UserModel(id="2", name="Bob")
print(converted_user.id, type(converted_user.id)) # 输出: 2 <class 'int'>
# 🛑 严格拦截:如果数据实在无法转换,直接报错,阻止程序带病运行
try:
bad_user = UserModel(id="这不是数字", name="Charlie")
except Exception as e:
print("数据校验失败:", e)
