Java.use(better, Python)《9》for と別れる50の方法(その弐)

記事一覧《こちらに移動中です》2006年6月15日 (木)

Java.use(better, Python)  # Stairway to Real Agile World

《9》for と別れる50の方法(その弐)《Jython2.5.0》

《著》後藤いるか・伊藤うさぎ・小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23

■ 概要

__getitem__ を再定義すると、組み込み型と同様に、任意のインスタンスにも演算子 [] や for 文を適用できるようになります。

for 文が提供するフレームワークを任意のオブジェクトで活用するには、いくつかの方法があります。

《9》for と別れる50の方法(その弐)

イテレーターに代るもの

演算子 [] や for 文を使って、組み込み型(list, dict など)が保持する要素を参照できます。

    
>>> s [1, 2, 3, 4] >>> type(s) <type 'list'>
変数 s は、4つの整数を列挙したリストを参照します。リストは、組み込み型 list のインスタンスです。リテラル表現 [ ] をもとに、リストのインスタンスを簡単に生成できます。リストの要素を順に参照するには、for 文を使うと便利です。
>>> for e in s:
...     print "@"+`e`,
... 
@1 @2 @3 @4
for 文を使うと、制御変数 e を介して、リスト s の要素を順に参照できます。出力結果を見ると、"@" の後に各要素が続き、空白で区切られているのが分ります。
    
1
3
リスト s の添字に数値 0 を指定すると、先頭の要素 1 が得られます。添字は、先頭からのオフセットに相当するので、0 から始まります。オフセットは、出発点から到達点までの距離に相当します。そのため、添字に 2 を指定すると、先頭から距離 2 だけ隔てた、3番目の要素 3 が得られます。
    
>>> m {'green': 2, 'blue': 4, 'red': 1} >>> type(m)
変数 m は、3つの整数対(キーと値)を列挙した辞書を参照します。辞書は、組み込み型 dict のインスタンスです。リテラル表現 {} をもとに、辞書のインスタンスを簡単に生成できます。辞書の要素を順に参照するには、for 文を使うと便利です。
>>> for e in m:
...     print "@"+e,
... 
@green @blue @red
for 文を使うと、制御変数 e を介して、辞書 m のキー要素を順に参照できます。出力結果を見ると、"@" の後に各キー要素が続き、空白で区切られているのが分ります。
>>> m["red"]
1
辞書 m の添字に文字列 "red" を指定すると(そのキー要素に)対応する値要素 1 が得られます。
※ 制御変数 e は、キー要素だけを参照して、値要素は参照できません。□
>>> s = xlist(s)
>>> type(s); s.__class__


任意のリスト s を保持する xlist のインスタンスを生成して、これを再び変数 s が保持します。このとき、任意のインスタンス s に対して、for 文を使えると便利です。
>>> for e in s:
...     print "@"+`e`,
... 
@1 @2 @3 @4
for 文を使うと、制御変数 e を介して、インスタンス s の要素を順に参照できます。出力結果を見ると、"@" の後に各要素が続き、空白で区切られているのが分ります。これは、組み込み型 list と同じです。
>>> s[0]
1
インスタンス s の添字に数値 0 を指定すると、s が保持する「リスト」の先頭の要素 1 が得られます。
class xlist:
    def __init__(self, list):
        self.items = list
        
    def __getitem__(self, index):
        return self.items[index]
特殊メソッド __getitem__ を再定義すると、任意のインスタンスに対して、演算子 [ ] を適用できます。また、インスタンスを構成する要素を参照するのに、for 文を利用できます。引数 index には、各要素を参照するために添字が渡されます。ここでは、インスタンス属性 self.list がリストを保持しているので、添字 index で参照されるリストの要素をリターン値にします。
《Note》特殊メソッド:__getitem__
 __getitem__(self, key)
式 self[key] を評価するときに実行されるコードを記述します。シーケンス型に対して有効なキーは、整数およびスライスなどです。□
================================== 後藤いるか+河野めだか 著 ◆ 監修:小泉ひよ子とタマゴ倶楽部
Last updated♪2009/08/03