2.6. モジュールのテスト

Python モジュールはオブジェクトであり, いくつかの便利な属性を持っています. これを使うと, あなたのモジュールを簡単に思い通りにテストできます. 以下は if __name__ トリックを使った例です.


if __name__ == "__main__":

本題に入る前に, ざっとコードを見てみましょう. まず, if 式に括弧は必要ではありません. 次に, if 式はコロンで終わり, それにインデントされたコードが続きます.

Note
PythonC のように, == を比較に用い, = を代入に用います. しかしPythonC と違って, インラインの代入を認めていません. なので, 比較しようとしていたところで間違って代入してしまうことはありません.

ではなぜこの if 文がトリックなのでしょうか? モジュールはオブジェクトであり, 全てのモジュールは __name__ という組み込みの属性を持っています. モジュールの __name__ 属性はあなたがそのモジュールをどう使うかによって決まります. もしあなたがモジュールを import したのなら, __name__ はディレクトリパスや拡張子を除いたモジュールのファイル名になります. しかしモジュールは単独のプログラムとして直接呼び出すこともでき, その場合は __name____main__ という特別なデフォルト値になります.

>>> import odbchelper
>>> odbchelper.__name__
'odbchelper'

これを知っていると, この if 文の中にテストスイートを書くことで, モジュールの中でそのモジュール用のテストスイートを設計することができます. モジュールを直接実行すると __name__ 属性の値が __main__ になり, テストスイートが実行されます. モジュールをインポートすると, __name__ は何か別の値になり, テストスイートは無視されます. このおかげで, 新しいモジュールをプログラムに組み込む前に, 開発しデバッグするのが簡単になります.

Tip
MacPython では, if __name__ トリックを仕掛ける前にもう 1 ステップ作業が必要です. ウィンドウの右上角の白い三角をクリックしてモジュールのオプションをポップアップさせ, Run as __main__ にチェックが付いているか確認します.

モジュールのインポートについてさらに知るには