将`jsons.dump(ipv4address(<string>)`更改为下列`jsons.load`的幂等元`

2024-05-16 03:26:52 发布

您现在位置:Python中文网/ 问答频道 /正文

请求

我想知道是否有可能采用默认的jsons.dump行为,并使其对python ipaddes是幂等的(返回输入字符串)

这将使我能够在python中使用对象,并在所有序列化和反序列化中使用相同的字符串。这样,当我们加载序列化的JSON时,第一个加载数据的程序和第二个加载数据的+N程序就不需要不同的控制路径

当前行为

>>> import ipaddress
>>> import jsons
>>> import ipaddress
>>> ipaddress.IPv4Address("192.0.0.1")
IPv4Address('192.0.0.1')
>>> jsons.dump(ipaddress.IPv4Address("192.0.0.1"))
{'_ip': 3221225473}
>>> jsons.load(jsons.dump(ipaddress.IPv4Address("192.0.0.1")))
{'_ip': 3221225473}

期望的行为

>>> jsons.load(jsons.dump(ipaddress.IPv4Address("192.0.0.1")))
"192.0.0.1"

想要但可能要求太多

>>> jsons.load(jsons.dump(ipaddress.IPv4Address("192.0.0.1")))
IPv4Address('192.0.0.1')

当前解决方法

我已经将__repr__方法更改为将类型转换为字符串。但这意味着我必须做jsons.dump(repr(<variable>)),这意味着其他使用我的代码的开发人员有一个潜在的地雷,他们需要注意


Tags: 数据对象方法字符串import程序ip序列化