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

Car*_*ith 4 python repr built-in

当您打印在Python的对象,__repr____str__不是由用户定义的Python转换的对象字符串表示,用尖括号分隔...

<bound method Shell.clear of <Shell object at 0x112f6f350>>
Run Code Online (Sandbox Code Playgroud)

问题是在Web浏览器中呈现包含必须正常呈现的HTML的字符串.浏览器显然被尖括号弄糊涂了.

我很难找到关于这些表示形成方式的任何信息,如果有一个名称甚至可以.

是否有可能改变了Python代表对象作为字符串的方式,对所有没有一个对象__repr__定义的方法,通过重写__repr__object类?

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

shx*_*hx2 7

您可以使用__builtin__s(在导入任何内容之前).我发现,替换__builtin__.repr没有工作,但更换__builtin__.object一样.

这是如何做到的.假设您有一个定义类的模块:

# foo.py
class Foo(object):
    pass
Run Code Online (Sandbox Code Playgroud)

在您的脚本中,执行:

# 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
Run Code Online (Sandbox Code Playgroud)

打印:

{Foo object at {0x100400010}}
Run Code Online (Sandbox Code Playgroud)

注意你已经给出bound method了一个你想要处理的例子,但是绑定的方法确实已经__repr__定义了,因此我猜你真的不想要一个影响它们的解决方案.(退房object().__repr__.__repr__)