Fis*_*ish 10 python import console namespaces global
我在让python类在python控制台中工作时遇到了麻烦.我想自动将所有类导入到全局命名空间中,这样我就可以使用它们而不需要任何prefix.module.names.
这是我到目前为止所得到的......
projectname/
|-__init__.py
|
|-main_stuff/
|-__init__.py
|-main1.py
|-main2.py
|
|-other_stuff/
|-__init__.py
|-other1.py
|-other2.py
Run Code Online (Sandbox Code Playgroud)
每个文件定义一个同名的类,例如main1.py将定义一个名为Main1的类.
我PYTHONPATH是projectname /的绝对路径.
我有一个包含以下内容的python启动文件:
from projectname import *
Run Code Online (Sandbox Code Playgroud)
但是这根本不能让我使用我的课程.启动python控制台后,我希望能够写:
ob=Main1()
Run Code Online (Sandbox Code Playgroud)
但Main1不在当前命名空间内,因此不起作用.
我尝试在__init__.py文件中添加内容......
在projectname/__init__.py:
import main_stuff
Run Code Online (Sandbox Code Playgroud)
在projectname/main_stuff/__init__.py:
import other_stuff
__all__ = ["main1", "main2", "main3"]
Run Code Online (Sandbox Code Playgroud)
等等.在我的启动文件中,我添加了:
from projectname.main_stuff import *
from projectname.main_stuff/other_stuff import *
Run Code Online (Sandbox Code Playgroud)
但是要在python控制台中使用这些类,我还是要编写:
ob=main1.Main1()
Run Code Online (Sandbox Code Playgroud)
我宁愿不需要这个main1.部分.有没有人知道如何在使用python控制台时自动将我的类放在全局命名空间中?
谢谢.
====编辑====
我需要的是在类级别导入一个包,但from package import *在模块级别给我一切.我正在做一个简单的方法来做这样的事情:
for module in package do:
from package.module import *
Run Code Online (Sandbox Code Playgroud)
====另一个编辑====
我最后分别将类导入添加到我的python启动文件中.它不是理想的,因为维护它的开销,但它做我想要的.
from class1.py import Class1
from class2.py import Class2
from class3.py import Class3
Run Code Online (Sandbox Code Playgroud)
Ned*_*der 19
您想使用不同的导入形式.
在projectname/main_stuff/__init__.py:
from other_stuff import *
__all__ = ["main1", "main2", "main3"]
Run Code Online (Sandbox Code Playgroud)
当您使用这样的语句时:
import foo
Run Code Online (Sandbox Code Playgroud)
您正在当前模块中定义名称foo.然后你可以foo.something用来获取foo中的东西.
当你使用这个:
from foo import *
Run Code Online (Sandbox Code Playgroud)
您将获取foo中定义的所有名称并在此模块中定义它们(例如将foo中的一桶名称倒入模块中).
| 归档时间: |
|
| 查看次数: |
8838 次 |
| 最近记录: |