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

标签 python string type-conversion

我在将 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/

相关文章:

python - 如何在 Google 表格和 Mysql 数据库之间同步数据?

c - 逐行解释代码

regex - 正则表达式如何在幕后工作(在 CPU 级别)?

c++ - 转换成本

javascript - Null 是类型对象,所以它是真的吗?幕后发生了什么?

java - 将 Java 函数传递给 KFunction

python - 如何从 Python 制作 .deb 文件

python - Docker 撰写缺少的 python 包

python - 无法使用多平台编译外部模块创建 setup.py 文件

C# 字符串拆分 - 无结束分隔符