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__を参照。