簡體   English   中英

我可以互相導入2個文件嗎?

[英]Can I import 2 files into each other?

我可以將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

兩個模塊(文件)互相導入沒有任何問題,盡管這種技術通常只在需要時才能使用。

只需確保從第一個模塊到第二個模塊的任何引用都不依賴於第一個模塊(例如,如果numberX基於File2的內容)。 代碼中不存在復雜的代碼依賴性,因此您應該沒問題!

有時你可以,但建議。 我說有時候你可以,因為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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM