为什么“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”对“导入*”没有预期的效果?

2024-09-20 01:40:57 发布

您现在位置:Python中文网/ 问答频道 /正文

文件结构:

./__init__.py
  a.py
    /lib
    __init__.py
    Foo1.py # contains `class Foo1`
    Foo2.py # contains `class Foo2`
    # so on ...

在{}中对此进行测试并工作,这样做

from lib.Foo1 import Foo1
from lib.Foo2 import Foo2

但是,当我在{}中执行{}{}时,它不起作用

错误:<type 'exceptions.TypeError'>: 'module' object is not callable

我错过了什么

这里是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() 

使用这些参考文献:
http://docs.python.org/2/tutorial/modules.html#importing-from-a-package
How to load all modules in a folder?


Tags: 文件frompyimportmodulesinitlibhtml
3条回答

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

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

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

请看一下Importing ^{} in Python以获得快速澄清

将以下内容添加到.../lib/__init__.py文件中:

from Foo1 import Foo1
from Foo2 import Foo1

__all__ = ['Foo1', 'Foo2']

请注意,PEP-8建议package and modules names be all lowercase避免混淆

from lib import *

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

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

鉴于

from lib.Foo1 import *
from lib.Foo2 import *

使我们的globals()成为

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

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

相关问题 更多 >