Python でシングルトンパターンを実装する

生成されるクラスインスタンスを常に一つにするシングルトンパターンを Python で実装します。

Python は Java みたいに “private static” みたいな修飾ができないし、どこで初期化すればいいのかもちょっと考える必要があります。

そのまえに、もし Python のクラス変数とインスタンス変数がいまいち区別できないという方は、こちらの記事を先にご覧いただくことをおすすめします。

Continue reading →

Python のクラス変数とインスタンス変数の危ない関係

Python でクラス変数を書き換えると生成済みのインスタンス変数にビックリな影響を与えることを知ったので、それについて書き留めておきます。使ったのは Python 3.5 です。

class Sandwich:
    ham = 0

メンバに変数 ham を持つ Sandwitch クラスを用意しました。このクラスのインスタンスを生成します。

>>> sw = Sandwich()
>>> sw.ham # インスタンス変数
0

当然、インスタンス変数は初期化された値が入ります。ではクラス変数を別の値に書き換えるとどうなると思いますか?

>>> Sandwich.ham = 1 # クラス変数に別の値を代入

そうすると…

Continue reading →