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其他所有类?
您可以使用__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__)
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |