蟒蛇更麻烦导入模块
昨天我问了一个类似的问题,但自那时起就遇到了一个很奇怪的问题。有了这个目录结构:蟒蛇更麻烦导入模块
app/
models/
__init__.py
user.py
other.py
pages/
__init__.py
pages.py
的模型/ __ init__.py文件中有这样一行:
__all__ = ['user', 'other']
和页/ __ init__.py有
__all__ = ['pages']
在pages.py,为了使用user.py或other.py中的任何类,我必须有
from models import *
import models
在顶部,然后我可以声明User
类是这样的:
my_user = models.user.User()
如果我排除任何进口-ING语句的顶部,我得到这样的错误
"Class user has no attribute User"
任何帮助将不胜感激。我喜欢Python,但我希望它的导入功能更像PHP。
有两种选择,取决于你想要显式的位置以及你想要多少“缺省”(这也意味着强制)。
在这些__init__文件,你可以使用:
# models/__init__.py shown:
import user, other # ambiguous relative import
from . import user, other # relative import
from app.models import user, other # absolute import
或者,如果你本来只是import models
,用途:
from models import user, other
# or:
import models.user, models.other
后一种形式更广泛的首选。
我把'app.models导入用户,其他',它的效果很好,谢谢 – 2010-02-18 18:42:14
import models.user
一两件事,可当你学习蟒蛇(或调试)真正有帮助的,是交互式运行,并使用dir()
功能,看看有什么住在哪里:
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> import models
>>> dir(models)
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
>>> models.user
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'user'
>>> from models import *
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'models', 'other', 'user']
>>> dir(models)
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__','__path__', 'other', 'user']
>>> user
<module 'models.user' from 'C:\test\models\user.py'>
>>> models.user
<module 'models.user' from 'C:\test\models\user.py'>
>>> user.User
<class 'models.user.User'>
更新:固定输出。
你的模型的内容是什么/ \ _ \ _ init \ _ \ _。py?正如问题所述,“进口模型; models.user'会给出一个AttributeError。 (您的示例在models/\ _ \ _ init \ _ \ _。py中有'import user'这会解释您的不同结果。) – 2010-02-18 17:32:32
@Roger - my models/__ init__.py只是'__all__ = ['user' ,'other']'。 – Seth 2010-02-18 17:40:04
然后,我希望你得到我得到的:http://codepad.org/yWnKyVAW。你有更早的'import models.user'或类似吗? (该导入将修改模型模块对象。) – 2010-02-18 18:23:13
这是我第一次听到有人说他们希望Python像PHP一样工作... – voyager 2010-02-18 17:26:52
哈,是啊这是我第一次说... – 2010-02-18 18:15:48