内部に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].array1
MyClass の元の配列を切り捨てて上書きし、次のようなインデックスの要素のみを持つようにします。
print(len(MyClass.array1))
128を返します
print(MyClass[0].array1)
0 を返します
今MyClass.array1
は単一の浮動小数点値であり、明らかに私が望んでいたものではありません。
これが十分に明確であることを願っています。
これを見つけましたが、これが私の問題に当てはまるかどうかはよくわかりませんでした。