__xxx__ 形式の特殊メソッド、特殊フィールド

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

関連記事:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)