gpt4 book ai didi

python - Python 中的 default() 方法

转载 作者:行者123 更新时间:2023-11-28 21:09:25 24 4
gpt4 key购买 nike

我正在制作一个用于将 python 对象转换为 json 的编码器,并且在研究时我看到很多包含 default 方法的解决方案。我不是 Python 专家,但绝对不是新手,我想知道我是否以某种方式错过了调用类时自动运行的 default 方法。或者,这仅仅是因为我继承了 JSONEcoder 类(它有一个默认方法,我现在只是覆盖)?有人可以澄清吗?如果是这样,它与

基本相同吗?
__init__()

方法?

顺便说一句,如果您需要更多视觉效果,我的编码器看起来像这样:

class ComplexEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, my_custom_object):
return str(obj)
return json.JSONEncoder.default(self, obj)

最佳答案

JSONEncoder 有一个 default 方法,如果它不知道如何将特定对象强制转换为有效的 JSON,则会调用该方法。默认实现只是引发 TypeError(因为它不知道如何强制转换类型)。但是,当覆盖默认方法时,您有机会返回编码器确实知道如何处理的对象。如果不知道如何处理输入的类型(例如,它不是 my_custom_type 的实例),那么您应该引发 TypeError 自己,或调用 JSONencoder 上的 default 方法,以便它可以引发错误。

通常,您会看到 super 在这里用于协作继承:

class ComplexEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, my_custom_object):
return str(obj)
return super(ComplexEncoder, self).default(obj)

如果所有您构建的编码器类都是这种形式,您可以将它们混合在一起:

class MySuperEncoder(ComplexEncoder, WidgetEncoder, FooEncoder):
pass

现在 ComplexEncoder 将处理它知道的事情(例如 my_custom_object),WidgetEncoder 将编码它知道如何处理的事情(可能是 Widget 实例),等等。

关于python - Python 中的 default() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38361769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com