2013-06-13 7 views
5

fv=object.fieldとしてアクセスできる読み取り専用フィールドが必要ですが、 の値がオブジェクトの他のフィールドから計算されます(つまり戻り値はfv==f(object.field2)を満たします)。 )。オブジェクト指向Matlabの派生プロパティを定義する方法

希望する機能は、Pythonのproperty関数/デコレータと同じです。

propertiesブロックのパラメータを設定することによってこれが可能であることがわかりましたが、Matlab OOPのドキュメントが散在しているため、再度見つけることはできません。

+0

「は、所望の機能をプロパティ関数/デコレータの場合と同じですPythonで。 あなたはPythonを使用するように思えます。 –

+0

@SlaterTyranus私はできることを望む。 – Dave

答えて

4

これは「従属」プロパティと呼ばれます。派生プロパティを使用して、クラスの簡単な例は以下の通りです:定義されたこのクラスでは

classdef dependent_properties_example < handle  %Note: Deriving from handle is not required for this example. It's just how I always use classes. 
    properties (Dependent = true, SetAccess = private) 
     derivedProp 
    end 
    properties (SetAccess = public, GetAccess = public) 
     normalProp1 = 0; 
     normalProp2 = 0; 
    end 
    methods 
     function out = get.derivedProp(self) 
      out = self.normalProp1 + self.normalProp2; 
     end 
    end 
end 

は、我々は今、実行することができます。

>> x = dependent_properties_example; 
>> x.normalProp1 = 3; 
>> x.normalProp2 = 10; 
>> x 
x = 
    dependent_properties_example handle 

    Properties: 
    derivedProp: 13 
    normalProp1: 3 
    normalProp2: 10 
+0

ここで特別な役割を果たす 'handle'から派生していますか? 'get.name'構文はクラスの' methods'ブロック内でのみ許されますか? – Dave

+0

いいえ、私は常にクラスを使用する方法です。与えられた例はいずれの方法でも動作します。 – Pursuit

+0

'handle'クラスをサブクラス化すると、これは「値」クラスとは区別されます。 'handle'からサブクラス化すると、他の言語で見られるようなオブジェクトの振る舞いが得られます。 [2つの違いに関するMATLABのドキュメント](http://www.mathworks.com/help/matlab/matlab_oop/comparing-handle-and-value-classes.html)は非常に役に立ちます。 –

2

あなたは、プロパティアクセスメソッドを使用することができます。http://www.mathworks.co.uk/help/matlab/matlab_oop/property-access-methods.html

は取得/設定機能を定義するには - get関数を使用すると、他のメンバーから計算した値を返すことができなければなりません。上のリンクの「依存するプロパティを持つメソッドセットを使用する場合」の節では、この例を示します。

関連する問題