我有这样的情况:
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
很容易:你需要变量是在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中没有真正的全局变量。变量总是附加到作用域。当一个变量在模块作用域中时,我们通常说它是"全局的"。
最宽的作用域是内置作用域,所以理论上可以添加一些东西作为内置作用域。然而,这是一个真正的坏习惯。而且它并没有完全解决这个问题,因为所有的文件都可以访问这个新的内置,但是他们不能在没有明确提及作用域的情况下重新分配它。