获取当前的 python 模块对象(按名称或其他方式)

Mar*_*cin 9 python python-2.7

如果我想获取当前模块,例如重新加载它,我会这样做:

import sys
sys.modules[__name__]
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点(例如不涉及__name__)?在这种情况下,更好意味着更惯用、更便携、更健壮,或者更多......我们通常在软件中希望的任何其他东西。

我使用 python 2,但 python 3 的答案无疑对其他人有用。

Mar*_*ers 10

没有sys.modules比您使用的更惯用的方法来获取当前模块对象了。

__name__由 Python 在导入时设置,本质上是:

module_object = import_py_file(import_name)
module_object.__name__ = import_name
sys.modules[import_name] = module_object
Run Code Online (Sandbox Code Playgroud)

所以该__name__参考正是想要在此处使用的。