gpt4 book ai didi

python - 如何理解和解析默认的 Python 对象表示

转载 作者:太空狗 更新时间:2023-10-30 02:04:34 26 4
gpt4 key购买 nike

当您在 Python 中打印一个对象时,__repr____str__不是由用户定义的,Python 将对象转换为字符串表示形式,用尖括号分隔...

<bound method Shell.clear of <Shell object at 0x112f6f350>>

问题是在 Web 浏览器中以还包含必须正常呈现的 HTML 的字符串呈现此内容。浏览器显然会对尖括号感到困惑。

我正在努力寻找关于这些表示是如何形成的任何信息,如果它们有一个名字的话。

对于 所有 没有 __repr__ 的对象,是否可以更改 Python 将对象表示为字符串的方式?定义的方法,通过覆盖 __repr__对于 object类(class)?

所以,如果 Python 通常会返回 "<Foo object at 0x112f6f350>" , 什么钩子(Hook)可以让它返回 "{Foo object at {0x112f6f350}}"相反,或其他任何东西,而不必修改 Foo和所有其他类(class)直接?

最佳答案

您可以使用 __builtin__(在导入任何内容之前)。我发现替换 __builtin__.repr 确实有效,但替换 __builtin__.object 有效。

这是如何完成的。假设您有一个定义类的模块:

# foo.py
class Foo(object):
pass

在您的脚本中,执行:

# main.py
import __builtin__

class newobject(object):
def __repr__(self):
return '{%s object at {%s}}' % (self.__class__.__name__, hex(id(self)))

__builtin__.object = newobject

from foo import Foo

foo = Foo()
print '%r' % foo

打印:

{Foo object at {0x100400010}}

请注意,您已将绑定(bind)方法 作为您想要处理的示例,但绑定(bind)方法确实 定义了__repr__,因此我猜你真的不想要一个影响他们的解决方案。 (查看 object().__repr__.__repr__)

关于python - 如何理解和解析默认的 Python 对象表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19754918/

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