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

标签 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 的(静态)代码分析器工具可以捕获 __all__ 暗示的破坏隐私的导入(bar_baz) >?

我已经测试了 Pylint,但它也没有捕捉到。

另一个澄清:我不是在谈论 __all__ 会被动态修改/填充和/或导入代码是动态的情况。只是静态可分析的代码情况。

最佳答案

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

换句话说; __all__ 从未打算作为仅将部分导出名称保佑为公共(public)名称的一种方式,就像 _name 前导下划线按照惯例只是私有(private)的而不是强制执行的。

关于python - 用于 Python 捕获模块隐私提示的静态代码分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19334483/

相关文章:

iphone - Objective-C 日志方法调用

java - 空分析注释包之间有什么区别?

python - Django 中是否存在导致此 'NoReverseMatch' 的类型差异?

python - 如何在 Python 中使用 xarray 连接来自多个 netCDF 文件的数据?

python - Django NoReverseMatch 错误,具有有效的 url 配置和 View

java - 有透明背景吗?

c++ - 在 Qt Creator 中进入 Qt 源代码(在 Ubuntu Linux 中)

visual-studio-2012 - 在 VS 中自定义代码分析消息

c# - 如何处理通过 Next 属性迭代的对象?

python - 从/proc/net/tcp6 解析 IPv6 地址(python 2.7)