【发布时间】:2013-11-14 07:34:50
【问题描述】:
当您在 Python 中打印一个对象,而 __repr__ 和 __str__ 不是由用户定义时,Python 会将对象转换为字符串表示,用尖括号分隔...
<bound method Shell.clear of <Shell object at 0x112f6f350>>
问题是在 Web 浏览器中以字符串形式呈现此内容,其中还包含必须正常呈现的 HTML。浏览器显然被尖括号弄糊涂了。
我正在努力寻找有关这些表示是如何形成的任何信息,如果它们有名称的话。
对于没有定义__repr__ 方法的所有 对象,是否可以通过覆盖object 类的__repr__ 来更改Python 将对象表示为字符串的方式?
那么,如果 Python 通常会返回 "<Foo object at 0x112f6f350>",那么有什么钩子可以让它返回 "{Foo object at {0x112f6f350}}" 或其他任何东西,而无需直接修改 Foo 和其他所有类?
【问题讨论】:
-
转义有XML含义的字符怎么样?
-
它需要将
"<em><Shell object at 0x112f6f350></em>"之类的东西渲染为Shellrepr,用斜体表示。 -
我猜想转义不在实际 HTML 元素列表中的所有内容可能会起作用。我仍然宁愿避免解析字符串。很乱。 Python 中必须有某种方法可以连接到
__repr__方法或其他东西。如果能够基于self覆盖__repr__默认的工作方式,以语法高亮对象表示并提取文档字符串等,那就太好了。 -
除了将元类注入每个类或提供提供
__repr__实现的基类(包括提供替代内置在object)。一个更好的解决方案是使用一个不错的模板库,在生成 HTML 时自动转义尖括号。 -
@CarlSmith:在某些时候你的对象是对象,此时调用
escape(repr(obj))而不是repr(obj)。或者只是使用 Marijin 建议的 HTML 模板库