【问题标题】:Python - importing package classes into console global namespacePython - 将包类导入控制台全局命名空间
【发布时间】:2023-03-25 08:49:01
【问题描述】:

我在让我的 python 类在 python 控制台中工作时遇到了一些麻烦。我想自动将我的所有类导入到全局命名空间中,这样我就可以在没有任何 prefix.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

【问题讨论】:

    标签: python import console namespaces global


    【解决方案1】:

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

    projectname/main_stuff/__init__.py:

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

    当你使用这样的语句时:

    import foo
    

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

    当你使用这个时:

    from foo import *
    

    您正在获取 foo 中定义的所有名称并在此模块中定义它们(例如将一桶名称从 foo 倒入您的模块中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-20
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 2014-06-24
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多