假设我有一个模块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/