0

内部にnumpy配列がたくさんあるクラスを作成しました。__getitem__次のようにインデックス付けされた配列でクラスを返そうとする関数を作成しました。

MyClass[i].array1と同等ですMyClass.array1[i]

_ _ getitem _ _ が参照を返すようにしたいのですが、それらはコピーを返すため、割り当てが機能しません。

print(MyClass[i].array1)

0 を返します

MyClass[i].array1 = 10

print(MyClass[i].array1)

まだ0を返します

これは私が使用している _get_item_ コードです:

def __getitem__(self, indices):
    g = copy.copy(self) # should be a shallow copy?
    for key,value in g.__dict__.iteritems():
        g.__dict__[key] = value[indices]
    return g

私も試しました:

def __getitem__(self, indices):
    g = MyClass()
    for key,value in self.__dict__.iteritems():
        g.__dict__[key] = value[indices]
    return g

と:

def __getitem__(self, indices):
    g = MyClass()
    g.__dict__ = self.__dict__
    for key,value in g.__dict__.iteritems():
        g.__dict__[key] = value[indices]
    return g

この最後のインスタンスは確かに参照を返すように見えますが、私が望む方法ではありません。この最後のコードを使用してクラスにインデックスを付けると、元のクラスの配列に対してインデックス付けと切り捨てが実行されるため、次のようになります。

g = MyClass[i].array1MyClass の元の配列を切り捨てて上書きし、次のようなインデックスの要素のみを持つようにします。

print(len(MyClass.array1))

128を返します

print(MyClass[0].array1)

0 を返します

MyClass.array1は単一の浮動小数点値であり、明らかに私が望んでいたものではありません。

これが十分に明確であることを願っています。

これを見つけましたが、これが私の問題に当てはまるかどうかはよくわかりませんでした。

4

1 に答える 1