当我使用自定义__get__
方法序列化对象列表时,不会调用__get__
,并且会使用来自__get__
的原始值(来自自定义__set__
的未处理)值。 Python的json
模块如何迭代项目?
注意:如果我在序列化之前迭代列表,则使用__get__
返回的正确值。
答案 0 :(得分:1)
它检查对象是否是特定值,或者是列表,元组或dicts的实例......
它提供了一种方法,如果所有这些都失败了该怎么做,并记录如何执行此操作:
import simplejson
class IterEncoder(simplejson.JSONEncoder):
def default(self, o):
try:
iterable = iter(o)
except TypeError:
pass
else:
return list(iterable)
return simplejson.JSONEncoder.default(self, o)
simplejson.dumps(YourObject,cls=IterEncoder)
答案 1 :(得分:0)
从Python 3.1.2文档(重新格式化以供查看,但未经编辑):
json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
default=None, **kw)
default(obj)是一个应该返回 obj 的可序列化版本或者引发 TypeError 的函数。默认情况下只会引发 TypeError 。
那么您的__get__
函数应该以{{1}}或类似的方式传递?只是一个想法。我可能会离开(可能是),但这至少是一个想法。