2016-05-24 65 views
1

內第二次我有這樣導入一個類的實例

main.py 
input/ 
    __init__.py 
    foo.py 

在main我導入Foo和與這些線創建它的一個實例與文件結構的項目:

爲主。 PY

from input.foo import Foo 
foo = Foo() 

裏面foo.py我需要使用線程,所以我將其導入並在初始化創建線程。

foo.py

from threading import Thread 

class Foo 
    def __init__(self): 
     newThread = Thread() 

後來我決定這將是在main.py線程有用的,所以我也用from threading import Thread進口它。一切工作,因爲它應該達到這一點。我認爲在執行過程中兩次輸入Thread是多餘的,所以我從foo.py中刪除了第一行並再次運行。這一次,當程序到達newThread = Thread()行時,我得到了NameError: global name 'Thread' is not defined

有沒有辦法讓我在main.py中進行導入,而不是在foo.py中再次導入呢?在一個程序中兩次導入同一個類感覺不對。

+0

「在一個程序中兩次導入相同的類感覺不對。」 - 爲什麼?這是完全正常的。這不會導致雙重初始化問題,並且在代碼運行之前,Python本身會多次執行它。 – user2357112

+0

從技術上講,您可以將'Thread'交給'Foo'的初始化程序,但是對於每個文件導入一次模塊確實沒有錯。 – L3viathan

回答

3

是的,即使其他模塊具有相同的依賴關係,您也應該將所有導入和依賴關係置於所有模塊的頂部。 python中的導入只存在於該模塊的範圍內。即使import語句存在兩次,python也足夠聰明,知道它已經被導入,並且不必實際重新導入模塊。

相關問題