2

他のオブジェクトのプロパティとして設定されているオブジェクトのプロパティを変更する場合、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 つのプロパティvalue11 つが変更されることを期待してい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 つのインスタンスのデフォルト値を変更できない場合、デフォルト設定の目的は何ですか?

4

0 に答える 0