2014-01-21 34 views
0

我使用它定義了一個類,如下所示一個模塊:爲什麼我必須聲明模塊名稱來創建對象?

class PyTimeCode(object): 
    <methods, etc.> 

在python解釋,我執行以下操作:

import pytimecode 

mytc = PyTimeCode(6) 

上述不工作(產生NameError)。

以下工作:

import pytimecode 

mytc = pytimecode.PyTimeCode(6) 

爲什麼?

回答

3

這是import聲明的工作原理。從documentation

第一種形式的導入語句將本地名稱空間中的模塊名稱綁定到模塊對象,然後繼續導入下一個標識符(如果有)。如果模塊名稱後面跟着as,則下面的名稱將用作模塊的本地名稱。

如果你想使用模塊的內容,而無需前綴使用from形式:

的從形式不綁定的模塊名稱:它通過標識符的列表,看起來他們每個人最多在步驟(1)中發現的模塊,並在結合在本地名稱空間中的對象有關的代碼的名稱這樣找到

一個例子:

from pytimecode import PyTimeCode 

mytc = PyTimeCode(6) 
(不推薦一般)

或:

from pytimecode import * 

mytc = PyTimeCode(6) 
+0

+1太感謝了,會接受,只要SO讓我。一個後續問題:出於某種原因,當我執行'pip freeze'時,此模塊顯示名爲'pytimecode.py',而其他模塊名稱不顯示'.py'擴展名。這很重要嗎?它會對任何事情產生影響嗎?謝謝。 – Sabuncu

+1

@Sabuncu對不起,不知道。但也許只是提出另一個問題,可能有人知道'點子'會幫助你。 – BartoszKP

+0

好的,再次感謝。 – Sabuncu

相關問題