On this page
reprlib —备用 repr()实现
源代码: Lib/reprlib.py
reprlib模块提供了一种生成对象表示的方法,该对象表示对结果字符串的大小有限制。这在 Python 调试器中使用,并且在其他上下文中也可能有用。
该模块提供了一个类,一个实例和一个函数:
类别
reprlib.
Repr
- 提供格式化服务的类,可用于实现类似于内置repr()的Function;添加了不同对象类型的大小限制,以避免生成过长的表示。
reprlib.
aRepr
reprlib.
repr
(* obj *)- 这是
aRepr
的repr()方法。它返回的字符串与同名内置函数返回的字符串相似,但对大多数大小有限制。
- 这是
除了大小限制工具之外,该模块还提供了一个装饰器,用于检测对repr()的递归调用并代之以占位符字符串。
@
reprlib.
recursive_repr
(* fillvalue =“ ...” *)
>>> from reprlib import recursive_repr
>>> class MyList(list):
... @recursive_repr()
... def __repr__(self):
... return '<' + '|'.join(map(repr, self)) + '>'
...
>>> m = MyList('abc')
>>> m.append(m)
>>> m.append('x')
>>> print(m)
<'a'|'b'|'c'|...|'x'>
3.2 版中的新Function。
Repr Objects
Repr实例提供了几个属性,这些属性可用于为不同对象类型的表示形式提供大小限制,并提供格式化特定对象类型的方法。
Repr.
maxlevel
- 创建递归表示的深度限制。默认值为
6
。
- 创建递归表示的深度限制。默认值为
Repr.
maxdict
Repr.
maxlist
Repr.
maxtuple
Repr.
maxset
Repr.
maxfrozenset
Repr.
maxdeque
Repr.
maxarray
Repr.
maxlong
- 表示形式中的最大字符数。数字从中间掉落。默认值为
40
。
- 表示形式中的最大字符数。数字从中间掉落。默认值为
Repr.
maxstring
- 限制字符串表示中的字符数。请注意,字符串的“普通”表示形式用作字符源:如果在表示形式中需要转义序列,则在缩短表示形式时可能会破坏它们。默认值为
30
。
- 限制字符串表示中的字符数。请注意,字符串的“普通”表示形式用作字符源:如果在表示形式中需要转义序列,则在缩短表示形式时可能会破坏它们。默认值为
Repr.
maxother
Repr.
repr
(* obj *)- 与使用实例强加的格式的内置repr()等效。
Repr.
repr1
(* obj , level *)Repr.
repr_TYPE
(* obj , level *)- 特定类型的格式化方法实现为具有基于类型名称的名称的方法。在方法名称中, TYPE 由
'_'.join(type(obj).__name__.split())
代替。 repr1()处理这些方法的调度。需要递归格式化值的特定于类型的方法应调用self.repr1(subobj, level - 1)
。
- 特定类型的格式化方法实现为具有基于类型名称的名称的方法。在方法名称中, TYPE 由
子类化 Repr 对象
Repr.repr1()使用动态分派允许Repr的子类添加对其他内置对象类型的支持或修改已经支持的类型的处理。此示例说明如何添加对文件对象的特殊支持:
import reprlib
import sys
class MyRepr(reprlib.Repr):
def repr_TextIOWrapper(self, obj, level):
if obj.name in {'<stdin>', '<stdout>', '<stderr>'}:
return obj.name
return repr(obj)
aRepr = MyRepr()
print(aRepr.repr(sys.stdin)) # prints '<stdin>'