说我有一个模块test.py
:
def foo():
print "foo"
def bar():
print "bar"
def _baz():
print "_baz"
__all__ = ['foo']
和main.py
:
from test import foo, bar, _baz
foo()
bar() # breaks module privacy
_baz() # breaks module privacy
是否有适用于Python的(静态)代码分析工具可以捕获导致bar
暗示隐私(_baz
,__all__
)的导入?
我测试了Pylint,但它也没有捕获。
另一个澄清:我不是在讨论动态修改/填充__all__
和/或导入代码是动态的情况。只是静态可分析的代码情况。
答案 0 :(得分:1)
因为__all__
的意图与隐私无关(它不是对导出内容的限制,它是划分通配符导入的工具)Python中没有任何工具生态系统存在,它采用该解释并跟踪__all__
中未列出的名称的使用情况。
换句话说; __all__
从未打算作为一种手段来仅将部分导出的名称保密为公开,就像_name
前导下划线只是按惯例私有而不是强制执行。