Python: Why “__all__” doesn't work for import?
文件结构;
1 2 3 4 5 6 7 | ./__init__.py a.py /lib __init__.py Foo1.py # contains `class Foo1` Foo2.py # contains `class Foo2` # so on ... |
在
1 2 | from lib.Foo1 import Foo1 from lib.Foo2 import Foo2 |
号
但是,当我在
错误:
我错过了什么?
这是
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/python import cgi, cgitb cgitb.enable() from lib import * print"Content-Type: text/html" print"" print"Test!" foo1 = Foo1() foo2 = Foo2() |
//使用了以下引用://http://docs.python.org/2/tutorial/modules.html从-a-package导入//加载python文件夹中的所有模块
1 | from lib import * |
号
将
1 2 | {'Foo1':<module lib.Foo1>, 'Foo2':<module lib.Foo2>} |
鉴于
1 2 | from lib.Foo1 import * from lib.Foo2 import * |
。
使我们的
1 2 | {'Foo1':<class lib.Foo1.Foo1>, 'Foo2':<class lib.Foo2.Foo2>} |
所以在第一种情况下,我们只是导入模块,而不是我们想要的模块内部的类。
从包中导入
因此,在您的情况下,
1 2 | foo1 = Foo1.Foo1() foo2 = Foo2.Foo2() |
。
请看一下在python中导入
将以下内容添加到…/lib/uuu init_uuuy文件中:
1 2 3 4 | from Foo1 import Foo1 from Foo2 import Foo1 __all__ = ['Foo1', 'Foo2'] |
注意,PEP-8建议包和模块名称都是小写的,以避免混淆。