185

如何从该模块中获取对该模块的引用?另外,如何获得对包含该模块的包的引用?

4

7 回答 7

240
import sys
current_module = sys.modules[__name__]
于 2009-11-04T21:45:59.567 回答
27

另一种技术,它不导入 sys 模块,可以说 - 取决于你的口味 - 更简单:

current_module = __import__(__name__)

请注意,没有导入。Python 只导入每个模块一次。

于 2017-07-28T17:00:19.860 回答
16

如果您在该模块中有一个类,则该类的__module__属性是该类的模块名称。因此,您可以通过 访问该模块sys.modules[klass.__module__]。这也适用于函数。

于 2009-11-04T21:46:01.497 回答
13

您可以使用获取当前模块的名称__name__

模块参考可以在sys.modules字典中找到。

请参阅 Python文档

于 2009-11-04T21:46:41.597 回答
3

您可以从外部传入它:

mymod.init(mymod)

不理想,但它适用于我当前的用例。

于 2017-09-20T03:17:37.470 回答
3

根据@truppo 的回答这个回答(和PEP366):

参考“this”模块

import sys
this_mod = sys.modules[__name__]

参考“这个”

import sys
this_pkg = sys.modules[__package__]

__package____name__如果从(顶部)开始,则相同__init__.py

于 2020-09-29T17:04:53.167 回答
-1

如果您只需要访问模块变量然后使用globals()['bzz'](或者vars()['bzz']如果它是模块级别)。

于 2021-11-19T11:54:18.687 回答