pydantic
from pydantic import BaseModel
# 1. 定义一个数据模型
class User(BaseModel):
name: str
age: int
email: str | None = None # 可选字段,默认值为None
# 2. 创建一个模型实例对象
user_obj = User(name="张三", age=25)
此时,user_obj 是一个User类的对象,它内部储存了数据。通常我们在输出时需要调用dict方法,转换为字典。
# 3. 将对象转换为字典
user_dict = user_obj.dict()
print(user_dict)
# 输出: {'name': '张三', 'age': 25, 'email': None}
print(type(user_dict))
# 输出: <class 'dict'>
现在,user_dict 就是一个标准的Python dict 类型,你可以像使用普通字典一样使用它,比如 user_dict['name'] 或遍历它。
高级用法:.model_dump() (Pydantic V2)
从Pydantic V2开始,官方推荐使用 .model_dump() 来替代 .dict()。它们功能几乎相同,但新方法更强大且是未来方向。
# Pydantic V2 的写法
user_dict_v2 = user_obj.model_dump()
print(user_dict_v2) # 输出同样结果: {'name': '张三', 'age': 25, 'email': None}
重要参数
.dict() 或 .model_dump() 方法支持一些有用的参数来控制输出:
include/exclude:指定要包含或排除的字段。- python
# 只包含 name 和 email 字段
print(user_obj.dict(include={'name', 'email'}))
# 输出: {'name': '张三', 'email': None}
by_alias:如果字段定义了别名,设置为True会使用别名作为字典的键。exclude_unset:非常实用。如果设置为True,则只输出实际提供了值的字段,忽略所有使用默认值的字段(如上面的email)。
print(user_obj.dict(exclude_unset=True))
# 因为创建时没给email赋值,它使用默认值None,所以被排除
# 输出: {'name': '张三', 'age': 25}