我有一个子模块:
.\
..\__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、如果还需要显微镜: