TAKEO

TAKEO

Python 添字アクセスが可能なオブジェクトの作り方 __getitem__

本記事ではPythonで添字アクセスが可能なオブジェクトの作り方を紹介します。

  • TL;DR
    • クラスに__getitem__メソッドを定義するだけ

添字アクセスとは

ここでいう添字アクセスとは配列でおなじみの下記のようなことを指します。

Copied!!
array = [1,2,3,4]
array[0] # 添字アクセス

今回したいこと

今回したいことは添字可能なオブジェクトを実装することを目的にします。

  1. 例えばMyClassという配列型のデータを保持しているクラスがあったときに

    Copied!!
    class MyClass:
      data = [0,1,2,3,4,5,6,7,8]
    
  2. インスタンス化したオブジェクトに

    Copied!!
    obj = MyClass()
    
  3. 添字を使ってMyClassのdataフィールドの配列にアクセスできるようにしたいです

    Copied!!
    obj[0] # 0
    obj[3] # 3
    obj[5] # 5
    

作り方

  • __getitem__メソッドを定義するだけ
example.py
Copied!!
class MyClass:
    data = [0, 1, 2, 3, 4, 5, 6, 7, 8]

    def __getitem__(self, index):
        return self.data[index]

このMyClassは次のように使うことができます。

Copied!!
>>> from example import MyClass
>>> obj = MyClass()
>>> obj[0]
0
>>> obj[1]
1
>>> for i in obj:
...     print(i)
...
0
1
2
3
4
5
6
7
8

References