potisanのプログラミングメモ

プログラミング素人です。昔の自分を育ててくれたネット情報に少しでも貢献できるよう、情報を貯めていこうと思っています。Windows環境のC++やC#がメインです。

Python 3.11でパッケージのグローバル変数やインポートを隠す

パッケージで使いまわしたいグローバル変数やインポートは__init__.pyと別ファイルの組み合わせで隠せます(見えにくくできます)。具体的には次の手順です。

  1. パッケージ名のディレクトリと__init__.pyを作成する。
  2. グローバル変数やインポートを使いたいスコープをfile1.pyなどに移動する。
  3. __init__.pyで公開したいオブジェクトだけfile1.pyなどからimportする。

上記の手順でパッケージ外からimport パッケージ名したときに__init__.py以外のファイルで使っているグローバル変数やインポートが非表示になります。厳密にはimport パッケージ名.file1で表示されますが、そこは使用者の使い方次第です。変数名やインポートエイリアス先頭の_で内部使用を示す方法も組み合わせられます。

この方法はcomtypesパッケージで知りました。このパッケージにはcomtypes.GUIDクラス(__init__.pyimportされたcomtypes.GUID.GUIDの別名)とcomtypes.GUIDファイルが存在していて、comtypes.GUIDファイルのグローバル変数_CLSIDFromString__init__.pyimportしないことで隠されています。