Singletonパターン

概要

オブジェクトが1つしかないことを保証するためのパターン」です。

スクリプト内で統一して扱いたいConfig系の変数などに適用されることが多いです。

Pythonの仕様とルールで対応できるので、その紹介に留めます。

例題と方針

  • 1つしかないオブジェクト(特定のサイトへのURL)を考えます。

Pythonは関数の外側で宣言された場合グローバルスコープになるという性質を利用します。

サンプルコード

URL = "https://www.yahoo.co.jp"


def main():
    print(URL)  # => "https://www.yahoo.co.jp"


if __name__ == "__main__":
    main()

サンプルコード – 結果

https://www.yahoo.co.jp

クラス図

省略

説明

関数の外で宣言し、パブリックな関数の中で変数へのアクセスを行う」ことで URL が1つしかないことを保証できます。

ただし、関数の中で変数に代入すると上書きされてしまうので注意してください。

また、このようにSingletonな変数を宣言するときは、変数を大文字とすることが多いです。

Pythonらしく書く

クラスではなく仕様とルールで対応

参考

実践Python3

実際にSingleton変数が使われているソース
(11行目あたりにあるRANDOM_SEEDなどが相当します)