python模块出现在没有的地方

时间:2010-06-26 03:55:00

标签: python google-app-engine

今天有一件奇怪的事发生在我身上。我试图在www.shell.appspot.com上找到一个发动机和Django。 当我进入     dir(django) 我得到的是

['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__path__', 'conf', 'core', 'template', 'utils']

但我还是试过

from django import forms

这让我感到惊讶,虽然在dir()的o / p上没有出现这种情况。所以出于好奇我再次进入dir(django) 我得到的o / p是

['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__path__', 'conf', 'core', 'forms', 'oldforms', 'template', 'utils']

请注意这里的表单元素。任何人都可以向我解释这些表单的来源吗?

1 个答案:

答案 0 :(得分:8)

语句from package import module加载(如果先前未加载)package/module.py(首次加载package/__init__.py后如果之前尚未加载它)并添加'module' }作为包中的条目(以及当前范围中的变量)。因此dir(package)会在导入后显示'module'条目,但不会在之前显示。

一个包可以包含无限数量的模块和子包(递归),所以加载包中的所有东西(只是为了填写它的dir! - )是非常慢的,直到特定的模块和子包被专门导入 - 所以,后者的加载是“及时”,当它们第一次被导入时(只有那时它们出现在paren包的dir中)。