如何递归导入模块中的所有类?

奥利克

可以__all__递归使用吗?这将导入模块__all__...

from mypkg import *

但不是递归的。

尝试将所有内容放入__all__(inside __init__.py) 似乎也没有用:

from pathlib import Path

# List all python (.py) files in the current folder and put them as __all__
fs = [f for f in Path('mypkg/').rglob('*.py') if not f.name.endswith('__init__.py')]
__all__ = [str(f).replace('/','.')[:-3][5:] for f in fs]

自从...

from mypkg import *

结果是AttributeError: module 'mypkg' has no attribute 'module1.file1'包中的第一个文件夹。

奥利克

通过将其添加到__init__.py. 在大多数情况下可能不是最好的方法,但对于我的用例来说已经足够了。

from pathlib import Path

# Include all classes when 'from mypkg import *' is called. 
fs = [f for f in Path('mypkg').rglob('*.py') if not f.name.startswith('_')]

for f in [str(f).replace('/', '.')[:-3] for f in fs]:
    statement = f'from {f} import *'
    exec(statement)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章