Python - 将包类导入控制台全局命名空间
我在使用Python控制台时遇到了一些麻烦。我想要自动把我的所有类导入到全局命名空间,这样我就可以直接使用它们,而不需要每次都写上前缀,比如module.names。
这是我目前的进展……
projectname/
|-__init__.py
|
|-main_stuff/
|-__init__.py
|-main1.py
|-main2.py
|
|-other_stuff/
|-__init__.py
|-other1.py
|-other2.py
每个文件定义了一个同名的类,比如main1.py会定义一个叫做Main1的类。
我的PYTHONPATH
是项目路径的绝对地址,也就是projectname/。
我有一个Python启动文件,里面包含了这些内容:
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 *
但是在Python控制台中使用这些类时,我仍然需要写:
ob=main1.Main1()
我希望不需要写main1.
这一部分。有没有人知道如何在使用Python控制台时自动把我的类放到全局命名空间里?
谢谢。
==== 编辑 ====
我需要在类级别导入一个包,但from package import *
会把所有内容都导入到模块级别。我想找一个简单的方法来做到类似这样的事情:
for module in package do:
from package.module import *
==== 另一个编辑 ====
最后我还是把类的导入一个个加到了我的Python启动文件里。虽然这不是最理想的,因为维护起来比较麻烦,但至少能实现我想要的效果。
from class1.py import Class1
from class2.py import Class2
from class3.py import Class3
1 个回答
你想用一种不同的导入方式。
在 projectname/main_stuff/__init__.py
文件里:
from other_stuff import *
__all__ = ["main1", "main2", "main3"]
当你使用这样的语句时:
import foo
你是在当前模块里定义了一个叫 foo 的名字。然后你可以用 foo.something
来访问 foo 里的内容。
当你使用这个:
from foo import *
你是在把 foo 里定义的所有名字都引入到这个模块里(就像把一个装满名字的桶倒进你的模块里)。