logo

Python の __getitem__()

Python ではすべてがオブジェクトです。これらのオブジェクトには、プログラマには見えないバックグラウンドで「通常の」システム コール メソッドが多数存在します。と呼ばれるものがここに来ます 魔法のメソッド 。 Python のマジック メソッドは、通常の Python コードを実行するときに呼び出される特別なメソッドです。通常の関数と区別するために、二重アンダースコアで囲んでいます。

a と b を追加する場合は、次の構文を記述します。



 c = a + b>

内部的には次のように呼ばれます。

 c = a.__add__(b)>

__getitem__()>は Python のマジック メソッドで、クラスで使用すると、そのインスタンスで[]>(インデクサー) 演算子。 x がこのクラスのインスタンスであるとします。x[i]>とほぼ同等ですtype(x).__getitem__(x, i)>

方法__getitem__(self, key)>次の表記を使用して、項目にアクセスしたときの動作を定義します。self[key]>。これは、可変コンテナー プロトコルと不変コンテナー プロトコルの両方の一部でもあります。



例:






# Code to demonstrate use> # of __getitem__() in python> > > class> Test(>object>):> > ># This function prints the type> ># of the object passed as well> ># as the object item> >def> __getitem__(>self>, items):> >print> (>type>(items), items)> > # Driver code> test>=> Test()> test[>5>]> test[>5>:>65>:>5>]> test[>'techcodeview.com'>]> test[>1>,>'x'>,>10.0>]> test[>'a'>:>'z'>:>2>]> test[>object>()]>

>

>

出力:

 5 slice(5, 65, 5) techcodeview.com (1, 'x', 10.0) slice('a', 'z', 2)>

他の言語とは異なり、Python では基本的に任意のオブジェクトをインデクサーに渡すことができます。驚かれるかもしれませんが、test[1, 'x', 10.0]>実際に解析します。 Python インタプリタにとって、その式は次と同等です。test.__getitem__((1, 'x', 10.0))>。ご覧のとおり、1、'x'、10.0 の部分は暗黙的にタプルとして解析されます。のtest[5:65:5]>式は Python のスライス構文を利用します。これは、式 test[slice(5, 65, 5)] と同等です。

__getitem__>マジック メソッドは通常、リストのインデックス作成、辞書検索、または値の範囲へのアクセスに使用されます。その多用途性を考えると、これはおそらく Python で最も活用されていない魔法のメソッドの 1 つです。