2013-02-04 39 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