2009-09-30 65 views
9

我遇到的麻烦我的蟒蛇类蟒蛇控制台内工作的地点。我想自动将所有类导入到全局名称空间中,以便我可以在不使用任何prefix.module.names的情况下使用它们。Python的 - 导入包中的类到控制台全局命名空间

这里就是我这么远......

projectname/ 
|-__init__.py 
| 
|-main_stuff/ 
    |-__init__.py 
    |-main1.py 
    |-main2.py 
    | 
    |-other_stuff/ 
    |-__init__.py 
    |-other1.py 
    |-other2.py 

每个文件定义了一类相同的名称,例如中main1.py将定义一个名为Main1的类。

我的PYTHONPATH是projectname /的绝对路径。

我有包含此蟒启动文件:

from projectname import * 

但是,这并不让我用我的课都没有。在启动python控制台时,我希望能够写出:

ob=Main1() 

但Main1不在当前名称空间内,所以它不起作用。

我尝试添加的东西到__init__.py文件...

projectname/__init__.py

import main_stuff 

projectname/main_stuff/__init__.py

import other_stuff 
__all__ = ["main1", "main2", "main3"] 

等。而在我的启动文件我补充:

from projectname.main_stuff import * 
from projectname.main_stuff/other_stuff import * 

但使用类蟒蛇控制台我仍然有中写:

ob=main1.Main1() 

我不希望需要的main1.部分。有谁知道在使用python控制台时如何自动将我的类放入全局命名空间中?

谢谢。

==== ====编辑

我需要的是在类级别导入包,但from package import *让我在模块级的一切。我做这样的事情的一个简单的方法之后我:

for module in package do: 
    from package.module import * 

==== ANOTHER编辑====

我结束了添加类进口到我的蟒蛇启动文件独立。这是不理想的,因为维护它的开销,但它做我想要的。

from class1.py import Class1 
from class2.py import Class2 
from class3.py import Class3 

回答

16

您想要使用不同形式的导入。

projectname/main_stuff/__init__.py

from other_stuff import * 
__all__ = ["main1", "main2", "main3"] 

当你使用这样的语句:

import foo 

您定义当前模块中的名称FOO。然后,您可以使用foo.something来获取foo中的内容。

当您使用此:

from foo import * 

你正在服用的所有foo中定义的名称,并在此模块中定义它们(像富浇名水桶到你的模块)。

+3

+1“倒一桶名” – 2013-03-27 18:31:41