__module__的语义

时间:2012-04-11 20:58:27

标签: python

我正在动态定义模块中的函数,然后更新模块的__all__和函数的__name__属性以匹配模块中的名称。我想知道更新函数的__module__属性以及指向函数将驻留的模块是否是个好主意。文档说__module__是:

  

定义函数的模块的名称,如果不可用,则为None。

创建函数的代码驻留在一个不同的模块中,该模块与函数所在的模块几乎无关。此模块中没有参考该功能。

我已经在邮件列表上做了一些讨论但是我对__module__的语义是什么以及我是否应该将其设置为None或函数所在的模块或者代码所在的模块创建函数。现在就离开它,但我很想知道是否有人知道答案。

2 个答案:

答案 0 :(得分:7)

我不会这样做。将功能从一个模块导入另一个模块是很常见的。 __module__属性用于检索定义函数的模块,以读取源代码或有时在脚本中重新导入它。我不认为定义是通过静态代码还是动态定义有很大不同:如果有人想要读取函数的源代码,他们应该查看动态创建它的模块。

您可以查看PEP 3130。虽然它被拒绝了,但它可能会让你更深入地了解__module__的目的,而不是其他地方的单句描述。

答案 1 :(得分:1)

你不应该经常担心__module__,有时它会用于暗魔法或知道函数的来源(例如)调试,但大多数时候每个人都忽略它。如果你真的很担心集__module__ = "dynamically_defined_function"或类似的东西。