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 Boxdata = 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: strage: 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)