我正在尝试从定义的同一模块中访问模块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__
吗?
答案 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__
是新值。
所以他们可能会有所不同,但前提是你在工作。