Как передать параметры в пользовательскую функцию JSONEncoder default () в Python - PullRequest
0 голосов
/ 28 апреля 2018

В моем приложении Flask я использую пользовательский JSONEncoder, который сериализует decimal.Decimal объекты, округленные до двух мест.

class MyJsonEncoder(JSONEncoder):

    def default(self, obj, prec=2):

        if isinstance(obj, Decimal):
            return str(obj.quantize(Decimal('.'+'0'*(prec-1)+'2')))
        else:
            return JSONEncoder.default(self, obj)

Параметр prec позволяет мне изменять точность округления. По умолчанию это два места. Я хочу иногда вызывать json.dumps и передавать ему параметр prec, чтобы вместо этого можно заставить decimal.Decimal объекты округлять до 4 мест.

json_string = json.dumps(some_data, prec=4)

Но когда я делаю это, модуль JSON выдает:

TypeError: __init__() got an unexpected keyword argument 'prec'

Можно ли сделать то, что я пытаюсь здесь? Я не понимаю, почему модуль JSON что-то делает с **kwargs. Могу ли я заставить его игнорировать их?

1 Ответ

0 голосов
/ 28 апреля 2018
class MyJsonEncoder(JSONEncoder):

    def __init__(self, prec=2, **kwargs):
        super(MyJsonEncoder, self).__init__(**kwargs)
        self.prec = prec

    def default(self, obj):
        prec = self.prec
        ...

MyJsonEncoder(prec=4).encode(some_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...