また、Python の話。
Python の仕様を良く知らずに、手元にあった Singleton を参考にしたら
はまってしまった。
(良く考えると、当前の仕様だが。。)

作業開始時の私の Python の知識では、新スタイルを用いた Python のクラスと
インスタンスの関係は以下のようになっていた。

例えば、以下のように MyClass というクラスと、そのインスタンス ins を
作成する場合を考える。
1)  class MyClass(object):
2)      pass
3)
4)  ins = MyClass()

始めに、1、2 行目で MyClass というクラスを作成している。
しかし、このクラス自体が、実は別のクラスのインスタンスである。
(このような「クラスのクラス」を「メタクラス」と言う)

ここでは、__metaclass__ という属性(アトリビュート)を定義していない。
この場合、MyClass のメタクラスはは最初に継承しているクラスのメタクラスと
同じ物になる。
つまり、この場合は MyClass のメタクラスは object のメタクラスである
type となる。
(ちなみに、__metaclass__ が定義されていると、MyClass のメタクラスは
__metaclass__ にバインドされているクラスになる)

次に、4 行目で MyClass のインスタンス ins を作成している。

別の書方をすると、、MyClass() を実行した結果を ins にバインドしている。
MyClass にはメタクラスで実装された __call__ というメソッドがあり、
MyClass()を実行するとは、この __call__ を実行することだ。

__call__ の内部は、始めに MyClass の __new__ を実行する。
(今回は object で実装された __new__ を実行する)
__new__ は Python の object を作成し、返す。(return する)

次に、__call__ は __new__ で返された object の __init__ を実行する。
(今回は object で実装された __init__ を実行する。
実質的に何もしない)

上記のクラス、インスタンスの関係は以下のようになる。
new_style
で、やっと肝心の Singleton の話題に入る。Singleton を実装したければ、以下の事を気を付ければよい。  1. 初めてインスタンスを作成する時は、作成と同時に、作成したインスタンスを保存する  2. 2回目以降は、インスタンスを作成せずに、保存されている物を返答する。これを実装するために、私の参考にしたプログラムは以下のようにしていた。
1)  class MyClass(object):2)      _singleton = None3)4)      def __new__(cls, *argc, **argv):5)        if cls._singleton == None:6)          cls._singleton = object.__new__(cls)7)        return cls._singleton8)9)  ins_a = MyClass()10)  ins_b = MyClass()
2行目は、MyClass 定義の際(ファイル読み込みの際)に 1 回だけ実行され、type のインスタンス MyClass の属性(アトリビュート)となる。9、10行目で MyClass() が実行されると、MyClass.__call__() が実行され、その中で MyClass.__new__(cls, *argc, **argv) が実行される。'cls' という変数は第一引数なので、メッセージを送信されたオブジェクト自身を指す。通常のメソッドでは 'self' と記載することが多いが、「オブジェクトが class である事を想定している」という事を示すために'cls' を用いている。つまり、5行目の cls._singleton とは、MyClass の属性 _singleton を想定している。9行目で実行された時は、cls._singleton は 2行目で初期化されたままなので、None だ。そのため、__new__ の if ブロックの中身が実行される。通常と同じ object.__new__ が実行され、その戻り値を cls._singleton にバインドした後、cls._singleton を返す。つまり、インスタンスの作成と保存を行う。10行目で実行された時は、cls._singleton は None ではない。そのため、__new__ の if ブロックの中身は実行されない。そして、cls._singleton に保存してある、前回と同じ object を返す。こうして、ins_a と ins_b はめでたく同じ object となる。GOF の Singleton が完成だ。しかし、9、10 行目で実行されているのは __new__ だけではない。実は、__init__ も 2回実行されている。長くなったので結論だけ畫くと、Python の入門書には、よく「object の初期化は __init__ で行いましょう」と書かれている。これを鵜呑みにすると、上記のサンプルでは初期化を 2 回行ってしまうのだ。対応方法としては、__new__ の中で object の初期化も行うか、Singleton の実装に別の方法をとるかだろう。(例えば、メタクラスの __call__ を変更する方法もある。)良く考えてみると当然の挙動だが、はまってしまった。普段、Python を書く時は print を用いた行デバッグしか使っていないが、どうしても原因がわからずにとうとうデバッガ(pdb)まで用いてしまった。