You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让TOML Kit支持自定义对象(如pathlib.Path)的序列化?

解决TOML Kit序列化pathlib.Path对象的问题

TOML Kit本身确实没有内置pathlib.Path类型的序列化支持,不过它提供了自定义类型转换器的机制,完全可以实现通用的类型扩展,针对Path对象的处理非常简单:

1. 注册自定义转换器

使用tomlkit.register_converter方法,给Path类型绑定一个转换函数,把Path对象转为TOML支持的字符串类型即可:

import pathlib
import tomlkit

# 注册Path类型转换器
tomlkit.register_converter(pathlib.Path, lambda path: str(path))

2. 测试序列化

注册之后,直接序列化Path对象就不会报错了:

# 创建包含Path对象的数据
data = {
    "project": {
        "root": pathlib.Path("src"),
        "config": pathlib.Path("config/settings.toml")
    }
}

# 生成TOML字符串
toml_str = tomlkit.dumps(data)
print(toml_str)

输出的TOML内容会是:

[project]
root = "src"
config = "config/settings.toml"

3. 通用扩展思路

如果要支持其他自定义对象,只需要给对应的类型注册转换函数,返回TOML规范允许的基础类型(字符串、整数、浮点数、布尔值、数组、嵌套表等)就行。比如自定义一个User类,转成包含必要字段的字典:

class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

# 注册User类型转换器
tomlkit.register_converter(User, lambda user: {"name": user.name, "age": user.age})

# 使用示例
data = {"author": User("toto", 30)}
print(tomlkit.dumps(data))

这样序列化出来的TOML会是:

[author]
name = "toto"
age = 30

这种方式比每次手动转类型要更通用,一劳永逸解决同类型对象的序列化问题。

内容的提问来源于stack exchange,提问作者toto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:33:11