如何使用__init__.py组织代码?

时间:2012-07-01 14:49:49

标签: python google-app-engine organization

我刚刚开始使用谷歌应用引擎,并一直在寻找良好的做法和代码组织。我的大部分问题都来自__init__.py的混淆。

我目前的测试结构如下

/website
  main.py
  /pages
    __init__.py #1
    blog.py
    hello2.py
    hello.py
    /sub
      __init__.py #2
      base.py

我正在尝试将main.py用作简单指向/ pages和/ pages / sub中所有内容的文件。 / pages中的大多数模块几乎共享所有相同的导入(例如import urllib),有没有办法定义/ pages中的所有内容都可以导入我想要的内容而不是在每个单独的模块中添加它?

目前在__init__.py#1我有

from sub.base import *

然而我的模块blog.py说没有定义BaseHandler(base.py中的函数)。 我的最终目标是拥有类似......

main.py
from pages import *
#be able to call any function in /pages without having to do blog.func1() or hello.func2()
#rather just func1() and func2()

并且能够在/pages的{​​{1}}中共享模块的常见导入。这样他们就可以共享urllib和base.py中的所有函数。感谢您抽出宝贵时间阅读本文,我期待您的见解。

1 个答案:

答案 0 :(得分:3)

听起来您认为__init__.py是包中其他模块的初始化程序。它不是。它将pages转换为一个包(允许其文件和子目录为模块),并在程序调用{​​{1}}时执行,就像普通模块一样。想象一下,它的名字是import pages

因此,如果您确实要将所有内容转储到同一名称空间中,则init#2可以包含pages.py(将from base import *中的所有内容导入base的名称空间),以及{ {1}}可以包含sub。知道了吗?