在python中,我们如何使对象在项目中的任何位置都可访问?
假设我们有两个模块A和B 在模块A中,我们有在python中,我们如何使对象在项目中的任何位置都可访问?,python,Python,假设我们有两个模块A和B 在模块A中,我们有 class Entity(object): pass obj = Entity() 现在,我想导入模块B中的对象“obj”,以及项目中的任何位置 在模块B中,我想做类似的事情 import obj 我们如何才能做到这一点?如何将对象放入我们的环境中?好的,您可以这样做。。。但不要这样做不要这样做。 两种方式,一种是更清洁: import sys sys.modules['obj'] = 'something here' import
class Entity(object):
pass
obj = Entity()
现在,我想导入模块B中的对象“obj”,以及项目中的任何位置
在模块B中,我想做类似的事情
import obj
我们如何才能做到这一点?如何将对象放入我们的环境中?好的,您可以这样做。。。但不要这样做不要这样做。 两种方式,一种是更清洁:
import sys
sys.modules['obj'] = 'something here'
import obj
print obj
print type(obj)
assert obj == 'something here', 'It is not what you expect!'
这件简单的事情是可行的,但您可能会有问题(在某个时候肯定会有问题)。例如,重新加载(obj)
将不起作用
另一种方法更安全、更干净,但仍然不是使用代码的正确方法:
__builtins__['obj'] = "something else"
# Used like this:
print obj # no need to import anything
这一个更好,因为每个人都期望(也应该期望)导入模块或包,而不是您的对象。最后一种方法不依赖于此假设,即使开发人员不知道此对象来自何处,obj
可能会由于未知(开发人员不知道)原因在全局/本地名称空间中导致冲突
你知道吗,只要从B import obj使用
。您不需要这个。您是否尝试过从导入obj中导入?:-)非常基本的python内容,真的。我建议您在堆栈溢出不太友好的一面开始给您反馈之前,快速通读一遍。:-)@MartijnPieters——我认为这个评论应该是一个答案。我不想从导入对象中执行。我想做的是使obj在环境中可见,这样我就可以执行导入obj
。为什么要这样做?解释原因可能会得到一些替代/更好的解决方案。@NedBatchelder我不确定我在这一点上强调的是否足够:D,但我认为这会让OP更好地理解幕后发生的事情。我总是觉得这些事情很有趣,但你是100%正确的:不要这样做。