我有一个装饰器,它在__get__
上返回一个字符串。如何使其与json.dumps
兼容?
import json
class Decorator(object):
def __init__(self, value=''):
self.value = value
def __set__(self, instance, value):
self.value = value
def __get__(self, instance, owner):
return self.value
class Foo(object):
decorator = Decorator()
foo = Foo('Hello World')
json.dumps(foo)
此最小示例在json.dumps
中引发了一个异常,指出Decorator
不可序列化。因为它不是一个真正的字符串,只是提供一个类似于接口的字符串,这并不奇怪。如何使用__get__
?
答案 0 :(得分:2)
您需要扩展JSONEncoder
类才能处理Foo
个对象;几乎从documents粘贴的示例:
>>> class myEncoder(json.JSONEncoder):
... def default(self, obj):
... if isinstance(obj, Foo):
... # implement your json encoder here
... return 'foo object'
... # Let the base class default method raise the TypeError
... return json.JSONEncoder.default(self, obj)
...
>>> json.dumps(foo, cls=myEncoder)
'"foo object"'