8

私は試した:

__all__ = ['SpamPublicClass']

しかし、もちろん、それは次の場合に限られます。

from spammodule import *

クラスのインポートをブロックする方法はありますか。誰かが書く私のコードの API レベルでの混乱が心配です。

from spammodule import SimilarSpamClass

そしてそれはデバッグ騒乱を引き起こすでしょう。

4

3 に答える 3

20

規則では、接頭辞として _ を使用します。

class PublicClass(object):
    pass

class _PrivateClass(object):
    pass

以下:

from module import *

_PrivateClass をインポートしません。

しかし、これは彼らがそれを輸入するのを妨げるものではありません. 彼らはまだそれを明示的にインポートすることができました。

from module import _PrivateClass
于 2010-02-01T15:46:36.443 に答える
7

プライベート クラスの名前はアンダースコアとアンダースコアで始めます。これにより、名前だけでパブリックな使用ではないことが明確になります。それは実際に誰かがクラスをインポートするのを妨げるものではありませんが、偶然に起こるべきではありません。アンダースコアで始まる名前は「内部」であるという確立された規則です。

于 2010-02-01T15:45:20.863 に答える
5

Python では、モジュールの内容やクラスの内容へのアクセスを実際にブロックする方法はありません。この種のことは、これがモジュールの実装の詳細であり、公開された API の一部ではないことを呼び出し元に示すために、クラスの規則名 (先頭にアンダースコアを付けたもの) によって処理されます。_SimilarSpamClass

Python で何かを「プライベート」としてマークするには、パブリック API を適切に文書化して、他の開発者がモジュールを正しく使用する方法を理解し、標準の命名規則に従って、モジュールのユーザーが API から実装に迷い込んだときに簡単に気付くようにします。

于 2010-02-01T15:47:36.940 に答える