Python:为什么__str__不能调用递归?

前端之家收集整理的这篇文章主要介绍了Python:为什么__str__不能调用递归?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

将dict转换为JSON对象时遇到一些麻烦.我有这门课:

class ServerResponse(object):

    status = None
    code = None
    message = None
    data = None

    OK_STATUS = True
    ERROR_STATUS = False

    OK_CODE = 200

    def __init__(self,status=OK_STATUS,code=OK_CODE,message=None,data=None,*args,**kwargs):
        self.status = status
        self.code = code
        self.message = message
        self.data = data

    def to_dict(self):
        fields = {
            "status": self.status,"code": self.code,"message": self.message,"data": str(self.data),}

        return fields

    def to_json(self):
        return json.dumps(self.to_dict())

    def __str__(self):
        return self.to_json()

我用这个类来生成服务器答案.

from server_response import ServerResponse as Response
...
return_data = {}

for (name,content) in result.items():
    if not prevIoUs_hashes or client.is_data_change(prevIoUs_hashes[name],data['hash']):
        return_data[name] = Response(data=content)
    else:
        return_data[name] = Response(code=201,message="Data has not changed")

response = Response(data=return_data)
...
self.write(str(response))

从服务器回答我得到下一个JSON

{u'status': True,u'message': None,u'code': 200,u'data': u"{'client': <server_response.ServerResponse object at 0x14e9710>,'service': <server_response.ServerResponse object at 0x14e90d0>}"}

为什么__str__函数不会递归调用

最佳答案
从这个程序:

class Foo(object):
    def __repr__(self):
        return "REPR"

    def __str__(self):
        return "STR"

x = {}

x['client'] = Foo()

print str(x)
print repr(x)

你可以看到dict总是在其成员上调用repr,无论是否在dict上使用了str或repr.

猜你在找的Python相关文章