sys.modules [__ name __] .__ doc__和__doc__是否始终相同?

时间:2017-02-28 16:50:26

标签: python python-module

我正在尝试从定义的同一模块中访问模块docstring。实际例子:

#!/usr/bin/env python3
"Module docstring that explains what the script does."

import argparse as ap

parser = ap.ArgumentParser(description=__doc__)
...

我一直使用__doc__,但后来我使用sys.module[__name__].__doc__偶然发现了一些代码。这两个对象看起来是一样的,但我想知道它们总是是否相同。换句话说,如下:

>>> sys.module[__name__].__doc__ is __doc__
True

总是如此吗?我可以在我的示例中安全地使用__doc__而不是sys.modules[__name__].__doc__吗?

1 个答案:

答案 0 :(得分:3)

在实践中,除非你不顾一切地使它们与众不同,否则它们将是相同的。

如果您指定给__name__,那么您可以将表达式引用到另一个模块:

"""My doc string"""
import sys

print(__doc__)
__name__='sys'
print(sys.modules[__name__].__doc__)

将打印两个不同的文档字符串。

或者,您可以单独留下__name__但是从sys.modules删除您的模块,然后使用相同的__name__导入另一个模块(或者在Python 2.x中使用reload()在编辑文档字符串后重新加载模块)。如果您保留对旧模块中某个功能的引用,您仍然可以调用它,__doc__将是旧值,而sys.modules[__name__].__doc__是新值。

所以他们可能会有所不同,但前提是你在工作。