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 つです。