C/C++言語ライクな関数

PeterNorvig氏のPython IAQより・・・
他にも EnumやStructの簡単な実装が書かれてあった。
enumは、僕が昨日日記に書いたのとは別の方法だった。
簡単な例では、red,green,blue=range(3)から、
他の例ではクラスを使ってクラスの__dict__に直接読み込む方法まで。

 class Enum:
   def __init__(self, *args, **keywords):
     self.__dict__(**keywords)

__dict__について調べていて解った事:
__dict__はクラスのメソッドに対応する名前と関数(FucntionType)
クラスを dir()して得られるのは、インスタンスメソッド(MethodType)
メソッドの方はオブジェクトを取り出しても、元のクラスのインスタンス
作らないと呼び出せない。

 import sys

 class ostream:
   def __init__(self, file):
     self.file = file
   def __lshift__(self, obj):
     self.file.write(str(obj))
     return self

 cout = ostream(sys.stdout)
 cerr = ostream(sys.stderr)
 endl = '\n'

 def printf(format, *args):
   print str(format) % args,


 if __name__ == '__main__':
   cout << "Hello" << "World!" << endl
   printf("%d times\n", 10)