2
如果我想获取当前模块,例如重新加载它,我会做:获取当前的python模块对象(通过名称或其他方式)
import sys
sys.modules[__name__]
是否有更好的方法来做到这一点(例如不涉及__name__
)?在这种情况下更好意味着更习惯,更便携,更强大,或更多...我们通常在我们的软件中需要的其他任何东西。
我使用python 2,但python 3的答案无疑会对其他人有用。
如果我想获取当前模块,例如重新加载它,我会做:获取当前的python模块对象(通过名称或其他方式)
import sys
sys.modules[__name__]
是否有更好的方法来做到这一点(例如不涉及__name__
)?在这种情况下更好意味着更习惯,更便携,更强大,或更多...我们通常在我们的软件中需要的其他任何东西。
我使用python 2,但python 3的答案无疑会对其他人有用。
没有更多的惯用方法从sys.modules
获取当前模块对象。
__name__
由Python的集进口,基本上是这样做的:
module_object = import_py_file(import_name)
module_object.__name__ = import_name
sys.modules[import_name] = module_object
所以__name__
引用正是你想在这里用什么。
不,“sys.modules [__ name __]'完全正确。 –
你可能想阅读[PEP 395](http://www.python.org/dev/peps/pep-0395/),它描述了所有已知的陷阱/问题'__name__',并解释了为什么有没有更好的选择可以像Python一样避免Python中的任何一种(3.4-当然,它对于2.7来说更是如此)。 (尽管标题,它提出了一些相关的变化,不只是增加'__qualname__',就像一个特殊的元路径钩子,使__main__'和真正的模块名称行事等价。) – abarnert
@abarnert真棒,非常丰富。 – Marcin