在python中,我们怎样才能在项目的任何地方访问对象?

时间:2012-08-15 12:12:01

标签: python

假设我们有两个模块A和B

在模块A中我们有

class Entity(object):
     pass

obj = Entity()

现在我想导入模块B中的对象'obj'以及项目中的任何位置

模块B中的

我想做这样的事情

import obj

我们怎样才能做到这一点?我们如何将对象放在我们的环境中?

1 个答案:

答案 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。你不需要这个。