Pythonでクラスをサブスクリプト可能にする方法


方法1: __getitem__メソッドを実装する クラスに__getitem__メソッドを実装することで、クラスのインスタンスをインデックスやスライスでアクセスできるようになります。

class SubscriptableClass:
    def __init__(self):
        self.data = [1, 2, 3, 4, 5]
    def __getitem__(self, index):
        return self.data[index]
obj = SubscriptableClass()
print(obj[2])  # インデックス2の要素を取得
print(obj[1:4])  # スライスによる要素の範囲を取得

方法2: デコレータを使用する Python 3.9以降では、クラスにデコレータ@functools.cacheを使用することで、クラスのインスタンスをキャッシュ可能にすることができます。これにより、クラスのインスタンスに対して直接アクセスできるようになります。

from functools import cache
@cache
class SubscriptableClass:
    def __init__(self):
        self.data = [1, 2, 3, 4, 5]
obj = SubscriptableClass()
print(obj[2])  # インデックス2の要素を取得
print(obj[1:4])  # スライスによる要素の範囲を取得

方法3: ライブラリを使用する サードパーティのライブラリであるnumpypandasを使用することで、クラスをサブスクリプト可能にすることができます。これらのライブラリは、多次元の配列やデータフレームを扱う際に非常に便利です。

import numpy as np
class SubscriptableClass:
    def __init__(self):
        self.data = np.array([1, 2, 3, 4, 5])
    def __getitem__(self, index):
        return self.data[index]
obj = SubscriptableClass()
print(obj[2])  # インデックス2の要素を取得
print(obj[1:4])  # スライスによる要素の範囲を取得

以上の方法を使用することで、Pythonでクラスをサブスクリプト可能にすることができます。必要に応じて、これらの方法を適用して自分のクラスに合わせてカスタマイズすることができます。