kha*_*iuk 2 python python-module
我想做这样的事情?
# __init__.py
import a_module
__all__ = [
'a_module',
]
__all__.extend(a_module.__all__) # it doesn't work
# AttributeError: 'module' object has no attribute '__all__'
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
更新:我不明白你为什么不这样做:
from a_module import *
Run Code Online (Sandbox Code Playgroud)
......如果您想要做的就是重新发布所有a_module发布的内容......这甚至是PEP8"制裁"使用星级导入的情况,这通常是不鼓励的.
...现在,如果上述解决方案不适合您,这里或多或少是手写的等价物:
dir() 应该给你一个对象(包括一个模块)的属性列表:
__all__.extend(dir(a_module))
Run Code Online (Sandbox Code Playgroud)
如果你想过滤掉以__和开头的东西_,只需:
__all__.extend(x for x in dir(a_module) if not x.startswith('_'))
Run Code Online (Sandbox Code Playgroud)
无论模块是否已声明,这都应该有效__all__.
并且,完全模仿Python的默认行为,即将模块中的所有非下划线前缀事物视为公共,除非__all__声明:
__all__.extend((x for x in dir(a_module) if not x.startswith('_'))
if not hasattr(a_module, '__all__')
else a_module.__all__)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
924 次 |
| 最近记录: |