如何在Python中将参数传递给自定义JSONEncoder default()函数

2024-04-27 09:52:36 发布

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

在我的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个位置。在

^{pr2}$

但是当我这样做时,JSON模块抛出:

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

有没有可能做我在这里要做的事?我不明白为什么JSON模块要对**kwargs执行任何操作。我能强迫它忽略它们吗?在


Tags: 模块对象selfjsonobj应用程序defaultflask
1条回答
网友
1楼 · 发布于 2024-04-27 09:52:36
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)

相关问题 更多 >