読者です 読者をやめる 読者になる 読者になる

何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

Pythonで頑張る『Java言語で学ぶデザインパターン入門』【Singletonパターン】

Python Design Pattern

【前回までの粗筋】
はてなブックマーク - おれのすたんぷ - 2014年9月29日より

普通にPythonデザインパターンの本じゃだめなんですか?という純粋な疑問。

僕もそう思います。

今日はSingletonパターンである。『Python文法詳解』によると、PythonではNoneType型, Bool型そしてEllipsis型がSingletonパターンで構成されているようである。

Python文法詳解

Python文法詳解

Singletonの役割はわかったものの、Pythonにおける__new__の取扱がよくわかっていない。ちゃんとわかっていないのに書くのは心苦しいが書く。
なお、Singletonパターン (1) - None is None is Noneを参考にした。

"""Singleton Method
あるクラスに対してインスタンスが1つしか存在しないことを保証し、
それにアクセスするためのグローバルな方法を提供する。
"""

class Singleton(object):
    """Singleton"""
    __instance = None
    def __new__(cls, *args, **keys):
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)
        return cls.__instance
    def __init__(self, name):
        self.__name = name
    def get_name(self):
        return self.__name

def main():
    s1 = Singleton("egg")
    s2 = Singleton("spam")
    print(s1.get_name())
    print(s2.get_name())
    if s1 is s2:
        print('s1 is s2')
    else:
        print('s1 is NOT s2')

if __name__ == '__main__':
    main()

Python向けに書かれたデザインパターンの本を読むべきか。まだ方針転換は間に合うはずだ。