我遇到这种情况:
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
。
答案 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中没有真正的全局变量。变量始终附加到范围。我们通常说变量是"全局"何时它在模块范围。
最广泛的范围是内置范围,因此理论上可以将内容添加为内置。然而,这是一种真正糟糕的做法。 此外,它还没有完全解决问题,因为所有文件都可以访问新的内置文件,但是他们无法在不明确提及范围的情况下重新分配它。