有没有办法缩短我包中特定 类 的输入命令?
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
我想创建一个大致具有以下结构的包:
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