全部模块都具有一个可用的 repr,但是你可以依据上述的属性设置,在模块的规格说明中更为显式地控制模块对象的 repr。
如果模块具有 spec (__spec__),导入机制将尝试用它来生成一个 repr。 如果生成失败或找不到 spec,导入系统将使用模块中的各种可用信息来制作一个默认 repr。 它将尝试使用 module.__name__, module.__file__ 以及 module.__loader__ 作为 repr 的输入,并将任何丢失的信息赋为默认值。
以下是所使用的确切规则:
如果模块具有 __spec__ 属性,其中的规格信息会被用来生成 repr。 被查询的属性有 "name", "loader", "origin" 和 "has_location" 等等。
如果模块具有 __file__ 属性,这会被用作模块 repr 的一部分。
如果模块没有 __file__ 但是有 __loader__ 且取值不为 None,则加载器的 repr 会被用作模块 repr 的一部分。
对于其他情况,仅在 repr 中使用模块的 __name__。
在 3.4 版更改: loader.module_repr() 已弃用,导入机制现在使用模块规格说明来生成模块 repr。
为了向后兼容 Python 3.3,如果加载器定义了 module_repr() 方法,则会在尝试上述两种方式之前先调用该方法来生成模块 repr。 但请注意此方法已弃用。
str与repr区别:
1、python中str函数通常把对象转换成字符串,即生成对象的可读性好的字符串,一般在输出文本时使用,或者用于合成字符串。str的输出对用户比较友好适合print输出。
2、pyton中repr函数将一个对象转成类似源代码的字符串,只用于显示。repr的输出对python友好,适合eval函数得到原来的对象。
3、在类中实现__str__和__repr__方法,就可以得到不同的返回,示例代码:
>>> class test(object):def __repr__(self):
return "return test repr() string."
def __str__(self):
return "return test str() string."
>>> print(str(test()))
return test str() string.
>>> print(repr(test()))
return test repr() string.
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)