如何从模块中获取对该模块的引用?另外,如何获取对包含该模块的包的引用?
import sys current_module = sys.modules[__name__]
如果在该模块中有一个类,则该类的“__module__ ”属性是该类的模块名称。因此,您可以通过sys.modules[klass.__module__]访问该模块。这也适用于函数。
__module__
sys.modules[klass.__module__]
您可以使用__name__来获取当前模块的名称
__name__
模块参考可以在sys.modules字典中找到。
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__相同
__init__.py
__package__
如果您只需要访问模块变量,则使用globals()['bzz'](或vars()['bzz'],如果它是模块级的)。
globals()['bzz']
vars()['bzz']