假设我们有两个模块A和B
在模块A中我们有
class Entity(object):
pass
obj = Entity()
现在我想导入模块B中的对象'obj'以及项目中的任何位置
模块B中的我想做这样的事情
import obj
我们怎样才能做到这一点?我们如何将对象放在我们的环境中?
答案 0 :(得分:1)
好的,你可以做到......但是不要这样做! 不要做。
两种方式,一种更清洁:
import sys
sys.modules['obj'] = 'something here'
import obj
print obj
print type(obj)
assert obj == 'something here', 'It is not what you expect!'
这个简单的事情有效,但你可能有问题(肯定会在某些时候)。例如,reload(obj)
将不起作用...
另一种方式,更安全,更清洁,但仍然不是使用代码的正确方法:
__builtins__['obj'] = "something else"
# Used like this:
print obj # no need to import anything
这个更好,因为每个人都期望(并且应该期望)import
导入模块或包,而不是你的对象。最后一种方法不依赖于这个假设,即使dev不知道这个对象来自何处,obj
可能会导致全局/本地命名空间中的冲突,原因是未知(由开发人员)。
你知道吗,只需使用from B import obj
。你不需要这个。