numpy 配列に多くのフィールドを含むオブジェクトがあります (それらはすべて float64 型です)。これらのフィールドの一部には、アクセス/書き込み時に使用したい意味のある名前がありますが、現在の知識では、次のようにアクセスして書き込む必要があります。
//access:
value = data[0]
//write:
data[0] = value
C で作業していた場合、次のようにします。
#define fieldname data[0]
//access:
value = fieldname
//write:
fieldname = value
Pythonで同じようにきれいにするにはどうすればよいですか?
編集:これらのフィールドはすべて、numpy 行列演算を使用した線形変換によって更新されるため、numpy 配列にとどまる必要があります。
編集:このメソッドを書くと:
def fieldname(self):
return self.data[0]
アクセスは希望どおりに見えますが、同じ方法でデータに書き戻すことはできません。
//access:
value = self.fieldname
(これより前のコードでは、問題がオブジェクト以外の状況に一般化されていると感じたため、self は省略されました。)
代入演算子のオーバーロードに関するこの投稿は、私が望むものに近いかもしれません: How to Emulate Assignment Operator Overloading in Python?
解決策:フィールド名を取り、self.data に対して必要な操作を実行するメソッドを記述します__getattr__
。__setattr__
提供されたフィールド名がデータ以外の別の属性のフィールド名と一致する場合、これらは呼び出されず、これらの特別な属性の名前が提供されたときにデータから内容を取得する機能を追加します。