2012-01-17 114 views
22

我有一個目錄,其中有.py個文件。每個文件都定義了一些類。我在目錄中也有一個空的__init__.py模塊沒有屬性

例如:

myproject 
    __init__.py 
    mymodule 
     __init__.py 
     api.py 
     models.py 
     views.py 

我試圖導入mymodule和訪問所有這些文件中定義的類:

from myproject import mymodule 

print mymodule.api.MyClass 

它給了我一個錯誤,指出mymodule有沒有屬性api。爲什麼?爲什麼我只能訪問其中一個文件(models.py)而不是其他文件?

In [2]: dir(banners) 
Out[2]: 
['__builtins__', 
'__doc__', 
'__file__', 
'__name__', 
'__package__', 
'__path__', 
'models'] 

回答

28

問題是子模塊不會自動導入。你必須明確地導入api模塊:

import myproject.mymodule.api 
print myproject.mymodule.api.MyClass 

如果你真的堅持api進口myproject.mymodule時,你可以把這個myproject/mymodule/__init__.py是可用:

import myproject.mymodule.api 

然後按預期這將工作:

from myproject import mymodule 

print mymodule.api.MyClass 
1

模塊不能這樣工作。

from myproject.mymodule import api 
print api.MyClass 
+0

我知道我可以做到這一點。是否可以使用虛線名稱? – akonsu 2012-01-17 17:47:42

+2

@akonsu,只需執行'import myproject.mymodule.api',然後通過'myproject.mymodule.api.MyClass'訪問它。 – 2012-01-17 17:50:57

+0

好吧,我認爲這是一個關於一般語言的問題,而不是關於如何讓我的代碼工作。我很好奇這是否可以實現。我可以通過'mymodule.api ...'來訪問我的課程嗎?沒有領先的'myproject'? – akonsu 2012-01-17 17:53:23

2

您還需要myproject目錄中的__init__.py。所以你的模塊結構應該是:

myproject 
    __init__.py 
    mymodule 
     __init__.py 
     api.py 
     models.py 
     views.py 
+1

是的,謝謝我有它,只是從問題中省略。 – akonsu 2012-01-17 17:50:21

相關問題