一个不太受欢迎但“支持”的Python技巧(参见Guido:https://mail.python.org/pipermail/python-ideas/2012-May/014969.html),它使得可以在模块属性上使用
然而,在Python-2.7中,原始模块中引入的所有其他模块都设置为None。
在Python-3.4中,一切都能正常工作:
这似乎与运行函数时导入的模块变成None有关,但是,有人知道这种情况在内部为什么会发生吗?
如果您存储原始模块(而不是在Python-2中完全替换它),则似乎一切都可以正常工作:
__getattr__
,具体方法如下:import os, sys
class MyClass(object):
def check_os(self):
print os
sys.modules[__name__] = MyClass()
导入时,被导入的模块成为一个类实例:
>>> import myModule
>>> myModule
<myModule.MyClass object at 0xf76def2c>
然而,在Python-2.7中,原始模块中引入的所有其他模块都设置为None。
>>> repro.check_os()
None
在Python-3.4中,一切都能正常工作:
>>> repro.check_os()
<module 'os' from '/python/3.4.1/lib/python3.4/os.py'>
这似乎与运行函数时导入的模块变成None有关,但是,有人知道这种情况在内部为什么会发生吗?
如果您存储原始模块(而不是在Python-2中完全替换它),则似乎一切都可以正常工作:
sys.modules[__name__+'_bak'] = sys.modules[__name__]