続: Python での組み込み型をより自然な名前にする
なんかしらんけど、前のエントリはPythonistaをたいへん刺激してしまったようだ。べつにもとの名前を使えなくするわけじゃなく、単にエイリアスを追加するだけなのに!
そこで、Pythonistaのお怒りを沈静化するべく、__builtins__を汚染しないように改造してみた。
## utypes.py __all__ = ( 'Str', 'List', 'Dict', 'Tuple', 'Set', 'Object', 'Type', 'Int', 'Long', 'Float', 'Complex', 'Bool', 'Unicode', 'File', ) Str = str List = list Dict = dict Tuple = tuple Set = set Object = object Type = type Int = int Long = long Float = float Complex = complex Bool = bool Unicode = unicode File = file
使い方:
### utypes を import したときだけ利用可能(__builtins__ を汚染しない) >>> from utypes import * # or Str, List, Dict >>> print Str, List, Dict <type 'str'> <type 'list'> <type 'dict'> ### str や list や dict という変数名を使っても無問題。ブラボー! >>> str = "foo" >>> type(str) == Str True >>> list = [1, 2, 3] >>> isinstance(list, List) True ### また大文字から始まるので、クラス名としても自然である。ブラボー! >>> dict = Dict([("one", 1), ("two", 2)]) >>> print dict {'two': 2, 'one': 1}
前にも書いたけど、Pythonのtype名が小文字始まりであることについては、特に技術的な利点とかそういうのがあるわけじゃなくて、単に最初の仕様がそうであって、それがそのまま継続されているっていうだけだよね? (違ってたら教えてください) だから大文字始まりのエイリアスを作るぐらい、そんなに目くじらを立てることとは思えない。それなら「typedef unsigned int uint」のほうがよっぽどマズい。
それから、pashango_p さん:
でも個人的に言うと、ローカル変数が命名しにくいからという理由で__builtins__を書き換えるのが一番ダメかな。
http://d.hatena.ne.jp/kwatch/20090716#c1247756361
『書き換え』じゃなくて、「追加」ね。べつにもとのstrやlistやdictを使えなくしているわけじゃないので。