2014-10-05 63 views
0

我有兩個Python文件,一個名爲main.py,另一個名爲second.py。在second.py中存在一個類,它使用了幾個模塊。從另一個文件導入類 - 在哪裏放置類需要的「導入」語句

我可以從運行在main.py中的代碼實例化類,因此允許我導入main.py中的模塊嗎?或者我必須真正擁有導入second.py的模塊,其中存在類?

我問這是因爲我認爲這是合乎邏輯的,如果您將一個類實例化爲代碼爲main.py的對象,那麼此類對象中的函數應該能夠使用在開始時導入的模塊main.py。那麼,通常情況下,import module陳述會在哪裏? main.pysecond.py.

+0

您應該'導入​​'該類需要的模塊*類定義*,即在'second.py'中。如果'main.py'中的其他類/函數也需要這些模塊,那麼也需要將它們導入。 – jonrsharpe 2014-10-05 10:21:31

+0

@jonrsharpe 因此,main.py中的類對象仍然使用在second.py中導入的模塊? – Sighonide 2014-10-05 10:24:03

回答

0

下面是一個簡單的反例:如果你在second.py依靠一個模塊上,在main.py時才導入?

main.py

import time 

import second 

timer = second.Timer() 

print timer.timestamp() 

second.py

class Timer(object): 

    def timestamp(self): 
     return time.strftime("%H:%M:%S") 

結果

Traceback (most recent call last): 
    File "/Users/jonrsharpe/Documents/main.py", line 7, in <module> 
    print timer.timestamp() 
    File "/Users/jonrsharpe/Documents/second.py", line 4, in timestamp 
    return time.strftime("%H:%M:%S") 
NameError: global name 'time' is not defined 

file.py中定義的類和函數使用該文件中定義的範圍 - 它們需要工作的任何import必須在file.py中進行。否則,您將依賴導入file.py的模塊來導入任何其他file.py需要工作,這將是荒謬的。

+0

但是,不是你的反例只是調用位於second.py的函數嗎?我的困惑在於實例化類的概念。如果該對象是在main.py中創建的,它是否將名稱空間更改爲main.py的名稱空間,還是保留在second.py中?如果這是有道理的: -/ – Sighonide 2014-10-05 10:39:36

+0

*「簡單地調用函數」* - 而不是什麼?爲什麼類和函數的行爲不同?我已經轉向了一個類的例子,這(驚喜!)完全一樣的東西。 – jonrsharpe 2014-10-05 10:44:28

+0

不要將我的問題或陳述誤解爲批評,我試圖理解差異。我認爲調用一個函數會使用second.py中的任何傳遞參數執行該函數,並實例化一個類會將實例帶到main.py,但我想我只需要理解該類實例使用second.py就可以運行導入的模塊(如您的示例所證明的),無論它在哪裏實例化。乾杯。 – Sighonide 2014-10-05 11:14:23