Python 为什么';"__全部;具有“预期效果”;导入*“;?

Python 为什么';"__全部;具有“预期效果”;导入*“;?,python,Python,文件结构: /\uuuu init\uuuuu.py a、 派克 /解放党 __初始值 Foo1.py#包含`class Foo1` Foo2.py#包含`class Foo2` #等等。。。 在a.py中对此进行了测试,并进行了工作 从lib.Foo1导入Foo1 从lib.Foo2导入Foo2 但是,当我从lib import*中执行时,\uuuuuu all\uuuuu=[“Foo1”,“Foo2”]在\uuu init\uuuuuuuuuuy.py中的不起作用 错误::“模块”对象不

文件结构:

/\uuuu init\uuuuu.py
a、 派克
/解放党
__初始值
Foo1.py#包含`class Foo1`
Foo2.py#包含`class Foo2`
#等等。。。
a.py
中对此进行了测试,并进行了工作

从lib.Foo1导入Foo1
从lib.Foo2导入Foo2
但是,当我从lib import*中执行
时,
\uuuuuu all\uuuuu=[“Foo1”,“Foo2”]
\uuu init\uuuuuuuuuuy.py
中的
不起作用

错误:
:“模块”对象不可调用

我错过了什么

这里是
a.py

#!/usr/bin/python 

import cgi, cgitb
cgitb.enable()

from lib import *

print "Content-Type: text/html"
print ""
print "Test!"

foo1 = Foo1()
foo2 = Foo2() 
使用这些参考文献:



将以下内容添加到您的
文件中

from Foo1 import Foo1
from Foo2 import Foo1

__all__ = ['Foo1', 'Foo2']
请注意,PEP-8建议这样做以避免混淆

from lib import *
将把
lib
中的所有内容导入到当前模块,因此我们的
globals()
如下所示:

{'Foo1':<module lib.Foo1>,
 'Foo2':<module lib.Foo2>}
使我们的
globals()
成为

{'Foo1':<class lib.Foo1.Foo1>,
 'Foo2':<class lib.Foo2.Foo2>}
{'Foo1':,
'Foo2':}

因此,在第一种情况下,我们只是导入模块,而不是其中的类,这正是我们想要的。

从包导入
*
时(在您的情况下,使用
init.py
中的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
指定应加载并导入当前命名空间的所有模块

因此,在您的情况下,
from lib import*
将导入模块
Foo1
Foo2
,您需要像这样访问类:

foo1 = Foo1.Foo1()
foo2 = Foo2.Foo2()
请看一看以快速澄清

foo1 = Foo1.Foo1()
foo2 = Foo2.Foo2()