プロキシオブジェクトを返すクラスで何らかの記述子を作成したいと思います。プロキシオブジェクトは、インデックス付けされるとオブジェクトのメンバーを取得し、そのオブジェクトにインデックスを適用します。次に、合計を返します。今私は(cluster_signal
が返す記述プロトコルを実装し、Pythonの記述子に私の配列を変更したPythonで適応可能な記述子
class CompartmentCluster(Cluster):
"""
Base class for cluster that manages evidence.
"""
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.variable_evidence = ArraySumProxy([])
class BasicEvidenceTargetCluster(CompartmentCluster):
# This class variable creates a Python object named basic_in on the
# class, which implements the descriptor protocol.
def __init__(self,
*,
**kwargs):
super().__init__(**kwargs)
self.basic_in = np.zeros(self.size)
self.variable_evidence.arrays.append(self.basic_in)
class ExplanationTargetCluster(CompartmentCluster):
"""
These clusters accept explanation evidence.
"""
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.explanation_in = np.zeros(self.size)
self.variable_evidence.arrays.append(self.explanation_in)
class X(BasicEvidenceTargetCluster, ExplanationTargetCluster):
pass
:私はメンバ変数として実際の配列を持っていながら、
例えば、
class NDArrayProxy:
def __array__(self, dtype=None):
retval = self[:]
if dtype is not None:
return retval.astype(dtype, copy=False)
return retval
class ArraySumProxy(NDArrayProxy):
def __init__(self, arrays):
self.arrays = arrays
@property
def shape(self):
return self.arrays[0].shape
def __getitem__(self, indices):
return np.sum([a[indices]
for a in self.arrays],
axis=0)
このソリューションではうまく働きました数値配列):
class CompartmentCluster(Cluster):
"""
Base class for cluster that manages evidence.
"""
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.variable_evidence = ArraySumProxy([])
class BasicEvidenceTargetCluster(CompartmentCluster):
# This class variable creates a Python object named basic_in on the
# class, which implements the descriptor protocol.
basic_in = cluster_signal(text="Basic (in)",
color='bright orange')
def __init__(self,
*,
**kwargs):
super().__init__(**kwargs)
self.variable_evidence.arrays.append(self.basic_in)
class ExplanationTargetCluster(CompartmentCluster):
"""
These clusters accept explanation evidence.
"""
explanation_in = cluster_signal(text="Explanation (in)",
color='bright yellow')
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.variable_evidence.arrays.append(self.explanation_in)
class X(BasicEvidenceTargetCluster, ExplanationTargetCluster):
pass
これは機能しませんappend文が記述子呼び出しの結果を追加するためです。私が必要とするのは、バインドされたメソッドまたは同様のプロキシのいずれかを追加することです。ソリューションを変更する最も良い方法は何ですか?つまり、変数basic_in
とexplanation_in
はnumpy
アレイでした。彼らは今ディスクリプタです。私はArraySumProxy
のいくつかのバージョンを開発して、実際の配列を必要とするのではなく記述子で動作させたいと考えています。
私はあなたの質問を完全に理解していません。以前にこれらのクラスをどのように使用していたか、変更された内容、変更後にどのように使用することができるのかを示すことができますか? – BrenBarn
@brenbarn:要約。 –
あなたの質問から、どのコードが常に使用されていて、どのコードが新しいかはわかりません。 –