Bean 工具 - BeanUtil

由来

Java 中 Bean(对象与字典之间的转换)是极其常见的操作。Python 中通过 BeanUtil 简化对象与字典之间的互转。

方法

from hutool import BeanUtil

# 对象转字典
class User:
    def __init__(self):
        self.name = "张三"
        self.age = 25

user = User()
data = BeanUtil.bean_to_map(user)  # {"name": "张三", "age": 25}

# 字典转对象
user2 = BeanUtil.map_to_bean({"name": "李四", "age": 30}, User)
print(user2.name)  # "李四"

# 属性拷贝
source = User()
target = User()
BeanUtil.copy_properties(source, target)

# 获取/设置字段值
BeanUtil.get_field_value(user, "name")        # "张三"
BeanUtil.set_field_value(user, "name", "李四")

# 批量转换
users = BeanUtil.to_bean_list(
    [{"name": "张三"}, {"name": "李四"}],
    User
)

# 判断是否为 Bean
BeanUtil.is_bean(User())    # True
BeanUtil.is_bean("string")  # False
BeanUtil.is_bean({})        # False

# 判断 Bean 字段是否全为 None
user3 = User()
user3.name = None
user3.age = None
BeanUtil.is_empty(user3)       # True
BeanUtil.is_not_empty(user)    # True(user.name 非 None)

# 判断 Bean 是否有 None 字段
BeanUtil.has_null_field(user3)  # True

# 遍历字段应用函数
result = {}
BeanUtil.desc_for_each({"a": 1, "b": 2}, lambda k, v: result.update({k: v}))
# result = {"a": 1, "b": 2}

# 用默认值填充 None 字段
BeanUtil.fill_bean(user3, lambda key: f"default_{key}")
# user3.name = "default_name", user3.age = "default_age"

# 去除字符串字段首尾空白
BeanUtil.trim_str_fields(user)
# user.name 会被 strip()

# 拷贝为对象列表
users = BeanUtil.copy_to_list([{"name": "a"}, {"name": "b"}], User)