2014-01-08 146 views
0

如果我導入使用這樣的語法Python模塊:Python的命名空間和模塊

import my_module 

我以後可以使用一些簡單的命令來獲得的模塊是什麼,它位於一個想法,等。例如:

print(my_module) 

輸出:模塊從 'my_module.py'

dir(my_module) 

輸出 'my_module':['MyCla SS', '內建', 'DOC', '文件', '', '', '數學', '操作系統', 'SYS']

我甚至可以通過找出模塊的絕對路徑:

print os.path.abspath(my_module.__file__ ) 

輸出:/Users/julia/Documents/classes/my_module.py

但如果代替進口「my_module」我會是使用:

from my_module import MyClass 

我只能是:

print MyClass 

,輸出:my_module.MyClass

我確實看到MyClass的從my_module文件來了。但不幸的是,這是我所能得到的,因爲我用來獲取模塊上的信息的命令都不起作用。下面是使用和它們的輸出:

print dir(my_module.MyClass) NameError: name 'my_module' is not defined 

print dir(my_module) NameError: name 'my_module' is not defined 

print my_module name 'my_module' is not defined 

什麼命令(-s),同時跟蹤與

from my_module import MyClass 

語法所帶來的進口的模塊,我應該使用?

+1

吧?問題是什麼?如果你只是導入MyClass ...你只能導入那個類... –

+0

這對我有用。也許你根本不會導入那個模塊,並且想打印它的細節。 – mojibuntu

回答

1

的問題是,

from my_module import MyClass 

只導入MyClass的,但不是整個模塊。

如果你想知道模塊的MyClass名字從被進口的,你可以使用:

print MyClass.__module__ 

如果你想使用其他的東西來自同一個模塊中,你可以使用:

my_module = __import__(MyClass.__module__) 
print dir(my_module) 

但它會更容易只寫:

import my_module 
0

感謝Mr.Crash! 以下是摘要:

如果模塊進口:

from my_module import MyClass 

不直接使用其名稱調用模塊。 通過此模塊進口類,而不是得到它(使用類的模塊 attr)使用,如:

print dir(MyClass.__module__) 
print os.path.abspath(MyClass.__module__)