在模块之间共享变量

时间:2014-07-02 12:11:27

标签: python variables python-3.x module

我遇到这种情况:

library_file1.py:

class A:
    def foo(self):
        print("bar")

    def baz(self):
        pass

project_file.py:

from library_file1 import A
class B(A):
    def baz(self):
        print(the_variable)

library_file2.py:

from project_file import B

the_variable = 7
b = B()
b.foo()   # prints "bar"
b.baz()   # I want this to print "7", but I don't know how

如何允许在project_file.py中编写可以从library_file2.py访问变量的代码?我能想到的唯一解决方案是:

project_file.py:

from library_file1 import A
class B(A):
    def baz(self, the_variable):
        print(the_variable)

library_file2.py:

from project_file import B

the_variable = 7
b = B()
b.foo()
b.baz(the_variable)

但这感觉很尴尬,并没有扩展到许多变量,如the_variable

1 个答案:

答案 0 :(得分:1)

非常简单:您需要将变量放在project_file.py而不是library_file2.py。 将project_file更改为:

from library_file1 import A
the_variable = None

class B(A):
    def baz(self):
        print(the_variable)

然后在library_file2

import project_file
from project_file import B

project_file.the_variable = 7
b = B()
b.foo()   # prints "bar"
b.baz()   # prints "7"

使用参数也是一个很好的解决方案(你应该尽可能地避免使用全局变量)。


在python中没有真正的全局变量。变量始终附加到范围。我们通常说变量是"全局"何时它在模块范围

最广泛的范围是内置范围,因此理论上可以将内容添加为内置。然而,这是一种真正糟糕的做法。 此外,它还没有完全解决问题,因为所有文件都可以访问新的内置文件,但是他们无法在不明确提及范围的情况下重新分配它。