作者: 機械伯爵
日時: 2002/4/3(21:20)
# selfward.py
# Pythonオブジェクトの特性で遊ぶスクリプトです
# Pythonコンソール上で以下のコマンドをうちこんでみて
# ください。
#
# >>> from selfward.py import SelfService
# >>> a = SelfService()
# >>> a()()()()()
#
# さぁ、どういう結果になるでしょう?
# ※Pythonのメソッドフックの理解に役立つと思います。
# ※ちなみに、selfを返すアイディアは、SmalltalkやC++の本には
#   載ってましたが、Pythonではあまり見かけませんね。

class SelfService:
  x = 0
  def __call__(self):   # 関数的な呼び出し
    print self.x        # を定義するメソッドフック
    self.x = self.x + 1 # ←旧式の書き方。+=でも可
    return self
  def __repr__(self):   # コンソール上での文字列表現
    return ""           # を定義するメソッドフック