Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,我们如何使对象在项目中的任何位置都可访问?_Python - Fatal编程技术网

在python中,我们如何使对象在项目中的任何位置都可访问?

在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

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

在模块A中,我们有

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%正确的:不要这样做。