用于Python捕获模块隐私提示的静态代码分析器

时间:2013-10-12 13:01:22

标签: python debugging code-analysis static-code-analysis

说我有一个模块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__和/或导入代码是动态的情况。只是静态可分析的代码情况。

1 个答案:

答案 0 :(得分:1)

因为__all__的意图与隐私无关(它不是对导出内容的限制,它是划分通配符导入的工具)Python中没有任何工具生态系统存在,它采用该解释并跟踪__all__中未列出的名称的使用情况。

换句话说; __all__从未打算作为一种手段来仅将部分导出的名称保密为公开,就像_name前导下划线只是按惯例私有而不是强制执行。