Python-将包类导入控制台全局名称

2024-10-01 05:03:10 发布

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

我在让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的类。

MyPYTHONPATH是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

Tags: 文件frompyimportpackageinitmain空间
1条回答
网友
1楼 · 发布于 2024-10-01 05:03:10

您要使用其他形式的导入。

projectname/main_stuff/__init__.py中:

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

当您使用这样的语句时:

import foo

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

使用时:

from foo import *

您将获取foo中定义的所有名称,并在此模块中定义它们(就像将一桶名称从foo倒进您的模块中)。

相关问题 更多 >