gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:08:42 25 4
gpt4 key购买 nike

我在将 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,无论 str 还是 repr 是否在 dict 上使用。

关于Python:为什么 __str__ 不调用递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19937504/

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