如何在我的 ujson 转储中包含私有属性?
Posted
技术标签:
【中文标题】如何在我的 ujson 转储中包含私有属性?【英文标题】:How can I include private attributes in my ujson dump? 【发布时间】:2020-07-01 13:44:08 【问题描述】:我想在某些时间点转储我的 Python 对象以进行故障排除。我正在尝试使用 ujson 将对象转储到文件中。但是,只有我的对象中的公共属性被写入文件。受保护的属性将被忽略。
这是一个 IPython 代码 sn-p 试图解释这个问题:
In [49]: class Harlog:
...: def __init__(self):
...: self.a = 1
...: self.b = 2
...: self.c = 3
...: self._d = 4
...:
In [50]: harlog = HarLog()
In [51]: vars(harlog)
Out[51]:
In [52]: ujson.dumps(harlog)
Out[52]: '"a":1,"b":2,"c":3'
请注意,受保护的属性“_d”没有作为转储的一部分进行序列化。
寻找这背后的原因,以及是否有办法序列化受保护的成员。
【问题讨论】:
可能要写一个自定义编码器 你的 Python 和 ujson 版本是什么?您的代码适用于 Py2.7 和 PyPy3.6。你试过标准的 json 模块吗? 【参考方案1】:你可以在下面使用这个:
class Harlog:
def __init__(self):
self.a = 1
self.b = 2
self.c = 3
self._d = 4
def json_converter(self):
return json.dumps(self, default=lambda o: key.lstrip('_'): value for key, value in o.__dict__.items())
并像这样在下面调用您的课程:
harlog = Harlog()
print(harlog.json_converter())
【讨论】:
以上是关于如何在我的 ujson 转储中包含私有属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的 Eloquent ORM laravel 选择中包含一个过程?