在file2.py中导入file1.py时出现导入错误,其中file2.py也导入file1.py

时间:2019-08-09 07:22:45

标签: python python-3.x pyramid

我是我的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'

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找python中的循环依赖

Circular dependency in Python enter link description here

您可以查看如何解决它们。

答案 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)