我正在寻找一个可以使对象全局化的代码。 我正在寻找的是 - 假设有一个文件xyz.py有代码
import some_module
class classname:
def __init__():
pass
def createobj():
some_module_obj = some_module()
还有其他两个文件1.py和2.py都有代码 的 1.py
import xyz
obj = classname()
obj.sayhi()
2.py
import xyz
obj.sayhi()
我想在2.py
中创建一次的2.py中使用相同的对象任何人都可以帮助我知道如何实现这一目标。
谢谢, Vipul
答案 0 :(得分:1)
2.py
import xyz
print xyz.obj
或
from xyz import obj
print obj
答案 1 :(得分:0)
您无法创建已知的名称,并且在所有模块中引用相同的对象。每个模块都有自己的global
命名空间。
但您当然可以使用限定名称访问其他模块的命名空间。
编辑:
使用像1
这样的模块名称(即在名为1.py
的文件中)或类似名称并不是一个好主意,因为数字不能用作标识符。 1.obj
等限定名称是语法错误。因此,我将使用文件one.py
和two.py
,然后我可以访问one.obj
而不会出现此问题。
如果在文件one.py
中你有某种感觉
obj = "foo"
然后您可以将其导入文件two.py
:
import one
print one.obj # or use it any way you like
如果您这样导入:
from one import obj
然后你仍然会有相同的对象:
print obj == one.obj # will print True (they are equal)
print obj is one.obj # will print True (they are the same)
但在另一个名为obj的变量中:
obj = "bar"
print obj, one.obj # will print "bar foo"
这两个变量不相同只是在你给它们分配的时候。
因此,如果您希望能够更改值(并且更改在所有使用模块中都有效),您可以在任何地方使用限定名称(one.obj
):
import one
one.obj = "bar"
或者,您可以更改现有值,而不是为变量指定新值。这对所有使用模块也有效:
one.py
:
obj = [ "foo" ]
two.py
:
from one import obj
obj[0] = "bar"
即使我们的one.py
是一个与obj
不同的变量,这也会在one.obj
生效,因为两个变量都引用相同的列表。
如果可能的话,我建议当然使用合格的名称使用该版本,因为引用的东西是隐藏机制,可能会让下一个开发人员感到惊讶。