0

我想在某些时间点转储我的 Python 对象以进行故障排除。我正在尝试使用 ujson 将对象转储到文件中。但是,只有我的对象中的公共属性被写入文件。受保护的属性将被忽略。

这是一个 IPython 代码片段,试图解释这个问题:

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”没有作为转储的一部分进行序列化。

寻找这背后的原因,以及是否有办法序列化受保护的成员。

4

1 回答 1

0

您可以在下面使用它:

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())
于 2020-03-20T12:31:46.947 回答