有没有办法缩短我包中特定 类 的输入命令?

Is there a way to shorten the input command for specific classes in my package?

我想创建一个大致具有以下结构的包:

package
    contrib
        case1
            src
                __init__.py
                case1.py
                    class case1
                    + other functions
            data

        case2
            src
                __init__.py
                case2.py
                    class case2
                    + other functions
            data

        case3
        ...

用户将通过访问 caseX 子文件夹中的 class caseX 来访问 caseX

我采用这种格式是为了让其他人可以轻松贡献自己的案例。这个想法是,有一天,贡献者可以通过在 contrib 文件夹中创建一个新的 caseY 子文件夹来添加他们自己的案例。

但是,这种结构使得 类 的导入命令非常长。应该是这样的:

from package.contrib.case1.src.case1 import case1

我的问题是:有没有办法缩短导入命令?理想情况下,我想通过简单地编写以下内容来导入 class caseX' from the classX` 子文件夹:

from package import case1

这可能吗?

如果有人也遇到这些问题,我使用 importlib 包解决了这个问题。在目录 /package/contrib/ 中,我将以下内容添加到 __init__.py:

import importlib

# Add one of these for each class I want to directly load using import
case1 = getattr(importlib.import_module("case1.src.case1", package='package'), "case1")

case1.src.case1 是文件 case1.py 的路径,采用 Python “点”表示法。最后一位(... , "case1"))指的是文件case1.py.

中的class case1

现在我可以编写此命令并直接访问 class:

from package import case1