ホームページ  >  記事  >  バックエンド開発  >  Python での __getitem__ 独自メソッドの解析

Python での __getitem__ 独自メソッドの解析

WBOY
WBOYオリジナル
2016-07-06 13:29:501597ブラウズ

__getitem__
理解するために簡単な例を見てみましょう:

リーリー

(1) __getitem__ 専用メソッドは非常にシンプルです。通常のクリア、キー、および値のメソッドと同様に、辞書にリダイレクトし、辞書の値を返すだけです。しかし、それをどうやって呼ぶのでしょうか?ああ、__getitem__ を直接呼び出すこともできますが、実際にはそうはなりません。ここでは、それがどのように機能するかを示すためだけにこれを実行しています。 __getitem__ を使用する正しい方法は、Python にそれを呼び出させることです。
(2) これは、辞書値を取得するために使用する構文のように見えますが、実際には、期待した値を返します。ここに隠しリンクがあります。Python は密かにこの構文を f.__getitem__("name") のメソッド呼び出しに変換しました。これが、__getitem__ がプライベート クラス メソッドである理由です。自分で呼び出すことができるだけでなく、正しい構文を使用して Python に呼び出すこともできます。

スライスを使用してオブジェクトをスライスします
リストには魔法のスライス方法があります:

リーリー

Fib でエラーが報告されました。その理由は、 __getitem__() に渡されるパラメーターが int またはスライス オブジェクトである可能性があるため、判断する必要があるためです。

リーリー
今すぐフィブのスライスをお試しください:

リーリー
ただし、ステップパラメータは処理されません:

リーリー
負の数値の処理がないため、__getitem__() を正しく実装するにはまだ多くの作業が必要です。

また、オブジェクトをdictとみなす場合、__getitem__()のパラメータはstrなどのキーとして使用できるオブジェクトである場合もあります。

それに対応するのは __setitem__() メソッドで、オブジェクトをリストまたは辞書として扱い、セットに値を割り当てます。最後に、要素を削除するための __delitem__() メソッドがあります。

つまり、上記の方法を通じて、定義したクラスは Python に付属のリスト、タプル、辞書と何ら変わらない動作をします。これは完全に動的言語の「ダック タイピング」によるものであり、強制的な継承は必要ありません。インターフェースの。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。