我可以互相导入2个文件吗?

时间:2014-05-22 02:35:02

标签: python

我可以将File1导入File2,将File2导入File1吗?由于我对PHP的 include 语句以及引入的递归问题的了解,我感到很担心。如果我能做到这一点,那么这是在File2中使用File1中找到的变量的最佳方法吗?

另一种方法是向doSomething添加另一个只传递numberX的参数,但我觉得创建另一个参数是处理这个问题的正确方法。

File1(中央文件):

import File2
class FooBar(): #a big object representing a wxFrame (GUI)
    doSomething()

class BarFoo(): #a big object representing a wxFrame (GUI)
    numberX = 12345

if __name__ == "__main__":
    instance1 = FooBar()
    instance2 = BarFoo()

File2(辅助函数):

#from File1 import BarFoo?
def doSomething():
    #need numberX here somehow

2 个答案:

答案 0 :(得分:2)

两个模块(文件)相互导入没有任何问题,尽管这种技术通常只在需要时才能使用。

确保从第一个模块到第二个模块的任何引用都不依赖于第一个模块(例如,如果numberX基于File2的内容)。像这样复杂的代码相关性并不存在于你的代码中,所以你应该没事!

答案 1 :(得分:1)

有时您可以,但建议。我说有时你可以,因为python知道一个模块已经导入了,不会再尝试导入它,所以python可以在这一点上处理循环模块依赖,但这并不意味着每件事都是正确的。

我将向您展示循环依赖导致问题的情况。

有一个a.py,它包含:

import b
def foo():
    return b.x
print "In module a: " + foo()

b.py

import a
x = '1'
def foo2():
    print "In module b: " + a.foo()

然后在python命令行中,如果导入a.py,它可以正常工作:

>>> import a
In module a: 1
>>> import b
>>> b.foo2()
In module b: 1

但是,如果先导入b.py,则会出错:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "b.py", line 1, in <module>
    import a
  File "a.py", line 4, in <module>
    print "In module a: " + foo()
  File "a.py", line 3, in foo
    return b.x
AttributeError: 'module' object has no attribute 'x'