1Box库简介
Box是一个Python库,它提供了一种将数据封装在字典和列表中的方式,同时提供了一些额外的功能,比如数据验证、默认值设置等。这使得Box库非常适合用于配置管理、数据传输对象(DTO)的创建,以及任何需要将数据结构化的场景。
Github地址:https://github.com/cdgriffith/Box
2 Box安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-box
安装成功如下:
3 Box使用
3.1 创建Box对象
创建了一个Box对象,并通过属性访问方式获取了对象的属性值。
from box import Box
# 创建一个Box对象
data = {'name': 'John', 'age': 30}
box = Box(data)
# 访问Box对象的属性
print("Name:", box.name)
print("Age:", box.age)
结果如下:
3.2 字典和对象之间的转换
Box库可以将字典转换为对象,也可以将对象转换为字典,使得开发者能够轻松地在两者之间进行转换。
from box import Box
# 将字典转换为Box对象
data = {'name': 'John', 'age': 30}
box = Box(data)
# 将Box对象转换为字典
dict_data = box.to_dict()
3.3 访问深层嵌套数据
Box库支持嵌套字典的访问,可以通过属性访问方式获取嵌套字典中的值。
from box import Box
data = Box({
'user': {
'name': 'Kimi',
'details': {
'age': 26,
'skills': ['Python', 'Machine Learning']
}
}
})
# 访问嵌套数据
print(data.user.details.age)
结果如下:
3.4 数据验证
from box import Box
from pydantic import BaseModel, ValidationError, validator
# 定义一个使用 Pydantic 进行数据验证的模型
class UserModel(BaseModel):
name: str
age: int
@validator('age')
def age_must_be_positive(cls, v):
if v <= 0:
raise ValueError('age must be a positive integer')
return v
# 定义一个示例数据字典
data = {
"name": "John Doe",
"age": 30
}
# 使用 Box 将字典数据转换为对象
box_data = Box(data)
# 将 Box 对象转换为 Pydantic 模型以进行验证
try:
user = UserModel(**box_data)
print("Validated Data:", user)
except ValidationError as e:
print("Validation Error:", e)
# 尝试使用无效数据进行验证
invalid_data = Box({"name": "John Doe", "age": -5})
try:
user = UserModel(**invalid_data)
print("Validated Data:", user)
except ValidationError as e:
print("Validation Error:", e)
3.5 设置默认值
我们通过设置 default_box=True 和 default_box_attr=default_data 来启用默认值功能。这样,如果 Box 对象中不存在某个属性,它将使用我们在 default_data 中定义的默认值。
from box import Box
default_data ={
'name': 'Kimi',
'skills': ['Python']
}
data = Box(default_data, default_box=True,default_box_attr=1991)
# 访问不存在的属性,将会使用默认值
# print(data.age)
# 使用default值对不存在属性赋值
data.setdefault('age', 30)
print(data.age)
# 访问不存在的属性,将会使用默认值
print(data.year)