17

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

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

创建函数的代码位于不同的模块中,该模块与函数所在的模块几乎无关。该模块中没有对函数的引用。

我已经在邮件列表上进行了一些探索,但是对于它的语义__module__是什么以及是否应该将其设置为 None 或函数所在的模块或代码所在的模块创建了功能。暂时搁置它,但有兴趣看看是否有人知道答案。

4

2 回答 2

8

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

你可以看看PEP 3130__module__尽管它被拒绝了,但它可能会让您比其他地方的单句描述更深入地了解它的目的。

于 2012-04-17T15:37:30.060 回答
1

您通常不必担心__module__,有时它用于黑魔法或知道函数来自哪里(示例)调试,但大多数时候每个人都忽略它。如果你真的很担心设置__module__ = "dynamically_defined_function"或类似的东西。

于 2012-04-11T21:08:21.703 回答