我正在尝试从定义的同一模块中访问模块文档字符串。实际例子:
#!/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__
吗?
最佳答案
实际上,除非您不遗余力地使它们有所不同,否则它们将是相同的。
如果您分配给__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__
是新的。
所以它们可能会有所不同,但前提是你努力做到这一点。
关于python - sys.modules[__name__].__doc__ 和 __doc__ 总是相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42514405/