2013-02-04 38 views
1

我有一個具有以下結構的python應用程序。如何在這種情況下配置__init__.py?

/app 
    /models 
    __init__.py 
    profile.py 
    /views 
    __init__.py 
    index.py 
    login.py 
    __init.py 
main.py 

當前這三個__init__.py文件是空的。

在像index.py這樣的文件中,我有幾個類。

class IndexHandler(webapp2.RequestHandler): 
    #blah blah 

我怎麼在__init.py__文件,寫,我可以調用類的profile.pyindex.py等,而無需輸入完整的包路徑?

回答

1

Python中的命名空間是顯式的。在每個__init__.py文件中,導入您希望在該包的名稱空間內可用的模塊,函數和類。

例如,如果你想在app包有一個index成員,/app/__init__.py

from views import index 

或者,如果你想在類本身是命名空間的一部分:

from models.views import IndexHandler 

這將允許你做:

import app 
handler1 = app.index.IndexHandler() # example 1 
handler1 = app.IndexHandler() # example 2 
1

您在技術上不必將任何內容放入__init__.py文件中。您應該能夠從您的main.py文件導入模型,只要它是在應用程序文件夾中,並使用功能,如:

import models  
models.profile.whatever 

如果main.py是「上面」你的/ app文件夾,你需要/ app文件夾中的一個__init__.py文件。那麼你可以這樣做:

import app 
app.models.profile.whatever 
+0

是的,我得到了臨屋區噸。我想直接從main.py中調用子包中包含的類,而不指定完整的包路徑。 – Ayrx

+0

你可以隨時做'從app.models.profile導入任何'然後做'whatever()' – Onlyjus