4

我刚刚开始使用谷歌应用引擎,并且一直在寻找良好的实践和代码组织。我的大部分问题都来自于__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()

并且能够共享 in/pages中模块的通用导入__init__.py。这样他们就可以共享例如 urllib 和 base.py 中的所有函数。感谢您花时间阅读这篇文章,我期待您的见解。

4

1 回答 1

3

听起来您认为__init__.py它是包中其他模块的初始化程序。它不是。它变成pages一个包(允许它的文件和子目录成为模块),当你的程序调用import pages. 想象一下,它被命名pages.py了。

因此,如果您真的想将所有内容转储到同一个命名空间中,则 init #2 可以包含 from base import *(它将将所有内容导入base到 的命名空间中sub),并且blog.py可以包含from sub import *. 知道了?

于 2012-07-01T17:06:06.680 回答