2013-12-12 106 views
2

如果我想获取当前模块,例如重新加载它,我会做:获取当前的python模块对象(通过名称或其他方式)

import sys 
sys.modules[__name__] 

是否有更好的方法来做到这一点(例如不涉及__name__)?在这种情况下更好意味着更习惯,更便携,更强大,或更多...我们通常在我们的软件中需要的其他任何东西。

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

+4

不,“sys.modules [__ name __]'完全正确。 –

+1

你可能想阅读[PEP 395](http://www.python.org/dev/peps/pep-0395/),它描述了所有已知的陷阱/问题'__name__',并解释了为什么有没有更好的选择可以像Python一样避免Python中的任何一种(3.4-当然,它对于2.7来说更是如此)。 (尽管标题,它提出了一些相关的变化,不只是增加'__qualname__',就像一个特殊的元路径钩子,使__main__'和真正的模块名称行事等价。) – abarnert

+0

@abarnert真棒,非常丰富。 – Marcin

回答

3

没有更多的惯用方法从sys.modules获取当前模块对象。

__name__由Python的集进口,基本上是这样做的:

module_object = import_py_file(import_name) 
module_object.__name__ = import_name 
sys.modules[import_name] = module_object 

所以__name__引用正是你想在这里用什么。

相关问题