【发布时间】:2015-03-17 18:56:30
【问题描述】:
在模块属性上启用__getattr__ 使用的不受欢迎但“受支持”的python hack(请参阅Guido:https://mail.python.org/pipermail/python-ideas/2012-May/014969.html)涉及以下内容:
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 中,原始模块中的所有其他导入模块都设置为无。
>>> repro.check_os()
None
在 Python-3.4 中,一切正常:
>>> repro.check_os()
<module 'os' from '/python/3.4.1/lib/python3.4/os.py'>
这感觉像是与Imported modules become None when running a function 有关,但是,有人知道为什么会在内部发生这种情况吗?
看来,如果您存储原始模块(没有在 Python-2 中完全替换它),那么一切都会继续工作:
sys.modules[__name__+'_bak'] = sys.modules[__name__]
【问题讨论】:
标签: python python-2.7 python-3.x python-import