3

モジュールがあるとします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

によって示唆されたプライバシー ( bar、 )を破るインポートをキャッチする、Python 用の (静的) コード アナライザー ツールはありますか?_baz__all__

Pylint をテストしましたが、どちらもキャッチしません。

__all__別の明確化:動的に変更/塗りつぶされる状況や、コードのインポートが動的である状況について話しているのではありません。静的に分析可能なコードの状況。

4

1 に答える 1

1

__all__の意図はプライバシーとは何の関係もないため (エクスポートされるものを制限するものではなく、ワイルドカードのインポートを区切るためのツールです)、Python エコシステムには、その解釈を取り、リストされていない名前の使用を追跡するツールは存在しません。で__all__

言い換えると; __all__エクスポートされた名前の一部のみをパブリックとして bless することを意図したものでは_nameありません。ちょうど慣例により、先頭のアンダースコアがプライベートであり、強制されないのと同じです。

于 2013-10-12T13:18:21.360 に答える