我是我的Python金字塔文件,File2.py导入File1.py,File1.py导入File2.py,这将创建无限循环并引发Import错误。我需要导入它们以使用类的公共变量以及therir函数。我该如何实现?
我在下面尝试过:
File2.py
Class File2 :
def __init__(self, sessionId):
from server.eventmanager.file1 import File1 # : Doesnt Work
if __name__ == "__main__":
from server.eventmanager.file2 import File2 # : Doesnt Work(Tried both(init+ main)/either
def myFunc(self):
print(File1.myvar)
File1.py
from /server/modules/mymodule/file2 import File2
Class File1:
def __init__(self):
pass
myvar = False
def updateMyVar(self,updatedvar):
cls.myvar=updatedvar
#Do Something
File "/server/eventmanager/file1.py", line 7, in <module>
from server.modules.mymodule.File2 import file2
File "/server/modules/mymodule/file2.py", line 13, in <module>
from server.eventmanager.File1 import file1
ImportError: cannot import name 'file1'
答案 0 :(得分:1)
答案 1 :(得分:0)
您可以在第一个导入上方添加if子句。
如果我理解正确,那么您可以从File2.py
开始代码。
在这种情况下,您应该这样做:
if __name__ == "__main__":
import file1
如果您运行File2.py
,__name__
将是__main__
。结果,如果-子句为true,则您导入File1.py
。现在File1.py
导入了File2.py
,但是这次__name__
不是__main__
,因为它没有作为“主文件”运行。这次__name__
将是File1
并且File1不再导入Test2,因为if子句将其停止,但是它仍然具有它的代码,因为它已经导入了一次。
编辑:
好,我知道了!您必须将if __name__ == "__main__"
子句放在代码的顶部在您的File1.py
中:
if __name__ == "__main__":
from server.eventmanager.file2 import file2 # Doesnt Work(Tried both(init+ main)/either
from server.eventmanager.file1 import File1 # : Doesnt Work
class File2:
def __init__(self, sessionId):
pass
def myFunc(self):
print(File1.myvar)