メソッド get
メソッド get は、任意のキーに対応する値を獲得します。
特殊メソッド __getitem__
演算子 [] の動作を規定するのが、特殊メソッド __getitem__ です。それは、次のようにして確認できます。
>>> class Reverse: pass>>> dir(Reverse)
['__doc__', '__module__']
新たに定義したクラス Reverse には、まだメソッドを定義していません。そのため、
>>> Reverse()[0]Traceback (most recent call last):
File "", line 1, in
Reverse()[0]
AttributeError: Reverse instance has no attribute '__getitem__'
新たに生成した Reverse インスタンスに、演算子 を適用すると、例外 AttributeError を生成して、エラーメッセージを出力します。これを見ると、演算子 に呼応する __getitem__ が必要になることが分かります。
そこで、演算子 [] を任意のインスタンスに適用できるように、__getitem__ を再定義します。
便宜的な事例
クラス Reverse は(説明用の便宜的なもので)与えられた文字列の順序を入れ換え(反転し)て、新たな文字列を生成するだけのものです。
class Reverse:
def __init__(self, s):
self.s = s[::-1]
def __getitem__(self, key):
return self.s[key]
メソッド __getitem__ は、演算子 を利用して、インスタンス属性 self.s が保持する部分文字列をリターン値とします。ここで興味深いのは、演算子 の動作を規定するメソッド __getitem__ を実現するときに、その を利用していることです。つまり、演算子 を Reverse インスタンスに適用すると、それは演算子 [] を文字列 self.s に適用することに帰着します。
>>> s = Reverse("ABC")
>>> for i,e in enumerate(s): print i,s[i]
0 C
1 B
2 A
反転した文字列 s を生成して、その添字式 s[i] を評価した結果を出力すると、各文字が順に得られます。