如何在模块内部获取对模块的引用?

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

75712 次浏览
import sys
current_module = sys.modules[__name__]

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

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

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

请参阅Python文档

还有一种技术,它不会导入SYS模块,并且可以说(取决于您的品味)更简单:

current_module = __import__(__name__)

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

可以从外部传入:

mymod.init(mymod)

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

根据@特鲁波的回答这个答案(以及PEP366):

引用";这个";模块

import sys
this_mod = sys.modules[__name__]

引用";这个";软件包

import sys
this_pkg = sys.modules[__package__]

如果来自(顶部)__init__.py,则__package____name__相同

如果您只需要访问模块变量,则使用globals()['bzz'](或vars()['bzz'],如果它是模块级的)。