python - sys.modules[__name__].__doc__ 和 __doc__ 总是相同吗?

标签 python python-module

我正在尝试从定义的同一模块中访问模块文档字符串。实际例子:

#!/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/

相关文章:

python - "site"不是一个包

python - 有没有办法以编程方式删除 Azure 中的 SQL 数据库?

python - 制作 "durable"对象

python - 在 python 库中导入和裁剪 jpeg 的快速方法

python - 在 Python 包中混合函数和子包

python - 如何在多个文件之间共享Python库

python - 无法从名为 'code' 的模块导入任何函数

python - 使用 Pysam 访问特定位置的 Bam 文件

python - 使用 python 在 Rally 中创建新缺陷时出现错误

python - 防止 Python 在加载脚本时加载脚本的某些部分