我有一个子模块:
.\
..\__init__.py
..\smth.py
代码smth.py是这样的:
_all_ = ['A']
__all__ = _all_ + ['B']
class A:
''' Видимый в __init__ '''
class B:
''' Видимый только при импорте из этого файла '''
class C:
''' Доступен только по прямому импорту '''
我不想乱扔子模块的命名空间,所以我__init__这样做了:
from .smth import _all_ as _smth_all_
from .smth import *
__all__ = _smth_all_
问题是它会from .smth import *导入将在 中的所有内容smth.__all__,即smth.A和smth.B,但我只需要A.
我不想写那样的东西,因为有from .smth import A很多名字,当添加新名字时,我将不得不更改 AND smth.py, AND __init__.py。
是否有解决方案如何smth.py仅从其中的那些名称导入_all_?
原来这个问题有两个答案。
1、用锤子代替显微镜:
雅尼。
__init__.py让所有的和A, 和 ,都被导入到文件B中 , 但是什么 , 导入命名空间还是会从 形成__init__.__all__, 也就是from __init__ import *只导入A. 实际上,这正是您所__all__需要的。2、如果还需要显微镜: