Как я могу включить личные атрибуты в мой дамп u json? - PullRequest
0 голосов
/ 20 марта 2020

Я хочу сбросить свой Python объект в определенные моменты времени для устранения неполадок. Я пытаюсь использовать u json для выгрузки объекта в файл. Однако только атрибуты publi c в моем объекте записываются в файл. Защищенные атрибуты игнорируются.

Вот фрагмент кода I Python, пытающийся объяснить проблему:

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 не был сериализован как часть свалка.

Поиск причин этого, а также возможность сериализации защищенных элементов.

1 Ответ

0 голосов
/ 20 марта 2020

Вы можете использовать это ниже:

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...