__xxx__ 形式で定義される特殊メソッド、特殊フィールドについて、よく利用されるもの。
メソッド
__init__
コンストラクタ。インスタンスを生成する際に呼び出される。
>>> class Hoge(object): ... def __init__(self, name): ... self.name = name ... >>> h = Hoge("John") >>> h.name 'John'
__getitem__, __setitem__
添字付きアクセスに対する[]演算子オーバーロード。添字でのアクセスが可能なオブジェクトになる。
>>> class MyList(object): ... def __getitem__(self, key): ... return key+10 ... def __setitem__(self, key, value): ... print "set {0}={1}".format(key, value) ... >>> ml = MyList() >>> ml[0] 10 >>> ml[1] 11 >>> ml[0] = 10 set 0=10
__iter__
イテレータが要求された際に呼びだされるメソッド。イテレータオブジェクトを返す。
__enter__, __exit__
with文に対する入り口、出口の処理。
__cmp__
比較演算子用。__cmp__(self, other)の関数は、self < otherの時に負の値。self == otherの時に0。self > otherの時に正の値を返すように実装する。これでself < otherのように比較演算子が使用できるようになる。__lt__, __le__のような拡張比較メソッドもあり、それを実装した場合は、__cmp__よりも優先される。拡張比較メソッド。
※Python3系では、__cmp__は廃止されて、拡張比較メソッドで実装するようになった。__lt__, __eq__を実装することで同等となる。
フィールド
__name__
モジュール内のスクリプトにおいてはモジュール名。関数オブジェクトにおいては関数名になる。メインスクリプトとして実行されたときは__name__は”__main__”になる。
>>> print __name__ __main__ >>> def hoge(): ... pass ... >>> hoge.__name__ 'hoge'
__class__
オブジェクトのクラス。
__file__
スクリプトのファイル名。
__all__
import *した時に、importするモジュールのリスト。パッケージの__init__.pyのモジュールで使用する。
__all__ = ["echo", "surround", "reverse"] このパッケージをインポートした時に、3つのモジュールがインポートされる。
__doc__
ドキュメンテーションコメントを参照する変数。
__slots__
オブジェクトがもつ属性のリスト。オブジェクトに属性を追加できないように制限できる。詳細は__slot__を参照。