他のオブジェクトのプロパティとして設定されているオブジェクトのプロパティを変更する場合、Matlab の動作を理解するのに苦労しています。具体的にはparentObject
、 a 、 a 、 aの 3 つのオブジェクトがあるchildObject
としpropertyObject
ます。もちろん、この単純な例では、これらのプロパティは少し無意味に見えますが、私は非常に大きなプログラムを書いているので、対応するすべてのメソッドとプロパティをこれらのレベルでグループ化すると便利です。
さて、これらのクラスの私の定義は以下のとおりです。parentObject
から継承しdynamicprops
て、インタラクティブに編集可能な子のリストを持つことができます。私のプログラムでは、動的にプロパティを追加 (または未使用の削除) できるようにする必要があるため、 はからpropertyObject
継承します。dynamicprops
classdef parentObject < dynamicprops
properties
name
children = [];
end
methods
function obj = parentObject(name)
obj.name = name;
end
function obj = addchild(obj, childName)
obj.children = [obj.children, childObject(childName)];
end
end
end
classdef childObject
properties
name
someProperty(1, 1) propertyObject
end
methods
function obj = childObject(name)
obj.name = name;
end
end
end
classdef propertyObject < dynamicprops
properties
value1 = 0;
value2 = 0;
end
methods
end
end
childrenObject
次のインタラクティブ セッションでは、子オブジェクトを作成し、 のいずれかのデフォルト値の1 つを調整しようとしていますpropertyObject
。の1 つのプロパティvalue1
の1 つが変更されることを期待していchildren
ます。
ただし、これは当てはまりません (以下を参照)。子の 1 つをpropertyObject
変更すると、2 番目の子の も自動的に変更されpropertyObject
ます。propertyObject
さらに、これら 2 つの が等しいかどうかをテストすると、肯定的な結果が得られます。子のインスタンス化 (およびそのデフォルト) が毎回propertyObject
一意になることを期待しています。propertyObject
私はPythonでのプログラミングから来ていますが、私の知る限りでは、これが当てはまります。どこが間違っているのか、クラスを意図したとおりに動作させる方法を誰かに説明してもらえますか?
>> parent = parentObject('parent')
parent =
parentObject with properties:
name: 'parent'
children: []
>> parent.addchild('child1')
ans =
parentObject with properties:
name: 'parent'
children: [1×1 childObject]
>> parent.addchild('child2')
ans =
parentObject with properties:
name: 'parent'
children: [1×2 childObject]
>> parent.children(1).someProperty
ans =
propertyObject with properties:
value1: 0
value2: 0
>> parent.children(2).someProperty
ans =
propertyObject with properties:
value1: 0
value2: 0
>> parent.children(2).someProperty.value1 = NaN
parent =
parentObject with properties:
name: 'parent'
children: [1×2 childObject]
>> parent.children(1).someProperty.value1
ans =
NaN
>> parent.children(1).someProperty == parent.children(2).someProperty
ans =
logical
1
追伸、私の質問が重複としてマークされているようです。ただし、重複した質問は私の質問の一部にしか答えていません。目的のオブジェクトの動作を取得する方法を説明するビット。重複した質問は、Matlab が既定のオブジェクト/プロパティを 1 回だけ読み込むことを説明していますが、Matlab が1 つのインスタンスのこの既定値を積極的に変更すると、すべてのインスタンスのプロパティ値が突然変更される理由はまだわかりません。つまり、すべてのインスタンスの値を変更せずに 1 つのインスタンスのデフォルト値を変更できない場合、デフォルト設定の目的は何ですか?