repr
repr — Alternate repr() implementation
注释
该repr
模块已被重命名为reprlib
Python 3. 当将源代码转换为Python 3时,2to3工具将自动适应导入。
源代码:
Lib / repr.py
该repr
模块提供了一种生成对象表示的方法,对结果字符串的大小有限制。这在Python调试器中使用,也可能在其他上下文中有用。
该模块提供了一个类,一个实例和一个函数:
class repr.Repr
提供格式化服务的类,用于实现类似于内置repr()的函数; 不同对象类型的大小限制被添加以避免产生过长的表示。
repr.aRepr
这是Repr
用来提供repr()
下面描述的功能的实例。更改此对象的属性将影响repr()
Python调试器使用的大小限制。
repr.repr(obj)
这是的repr()
方法aRepr
。它返回一个类似于同名内置函数返回的字符串,但对大多数尺寸有限制。
1. Repr对象
Repr
实例提供了几个可用于为不同对象类型的表示提供大小限制的属性,以及格式化特定对象类型的方法。
Repr.maxlevel
对创建递归表示的深度限制。默认是6
。
Repr.maxdictRepr.maxlistRepr.maxtupleRepr.maxsetRepr.maxfrozensetRepr.maxdequeRepr.maxarray
限制为指定对象类型表示的条目数量。默认值是4
for maxdict
,5
for maxarray
和6
for others。
新的2.4版:maxset
,maxfrozenset
,和set
。
Repr.maxlong
长整型表示中的最大字符数。数字从中间被丢弃。默认是40
。
Repr.maxstring
限制字符串表示中的字符数。请注意,字符串的“正常”表示形式用作字符源:如果在表示形式中需要转义序列,则缩短表示形式时这些转义序列可能会被损坏。默认是30
。
Repr.maxother
此限制用于控制对象上没有特定格式化方法的对象类型的大小Repr
。它以与...相似的方式应用maxstring
。默认是20
。
Repr.repr(obj)
等同于使用实例施加的格式的内置repr()。
Repr.repr1(obj, level)
递归实现使用repr()
。这使用obj
类型来确定调用哪种格式化方法,并将其传递给obj
和level
。特定repr1()
于类型的方法应调用执行递归格式化,并在递归调用level - 1
中使用level
的值。
Repr.repr_TYPE(obj, level)
特定类型的格式化方法实现为具有基于类型名称的名称的方法。在方法名称中,TYPE
被替换为string.join(string.split(type(obj).__name__, '_'))
。派遣到这些方法是由处理repr1()
。需要递归地格式化值的类型特定方法应该调用self.repr1(subobj, level - 1)
。
2. Repr对象的子类化
通过使用动态调度Repr.repr1()
允许子类Repr
添加对其他内置对象类型的支持或修改已支持类型的处理。这个例子展示了如何添加对文件对象的特殊支持:
import repr as reprlib
import sys
class MyRepr(reprlib.Repr):
def repr_file(self, obj, level):
if obj.name in ['<stdin>', '<stdout>', '<stderr>']:
return obj.name
else:
return repr(obj)
aRepr = MyRepr()
print aRepr.repr(sys.stdin) # prints '<stdin>'