2013-06-13 17 views
5

Desidero un campo di sola lettura a cui sia possibile accedere come fv=object.field, ma dove il valore che è restituito è calcolato da altri campi dell'oggetto (ovvero il valore restituito soddisfa fv==f(object.field2)).Come definire una proprietà derivata in object oriented Matlab

La funzionalità desiderata è la stessa della funzione property in Python.

Ricordo di aver visto un riferimento che è possibile impostando i parametri del blocco properties, ma la documentazione di Matlab OOP è così diffusa che non riesco a trovarla di nuovo.

+0

"La funzionalità desiderata è la stessa come per la funzione di proprietà/decoratore in Python. " Sembra che dovresti usare Python. –

+0

@SlaterTyranus Vorrei poterlo fare. – Dave

risposta

4

Si chiama proprietà "dipendente". Un rapido esempio di una classe utilizzando una proprietà derivata è qui sotto:

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 

Con questa classe definita, possiamo ora eseguire:

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

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

Deriva da 'handle' che gioca un ruolo speciale qui? La sintassi 'get.name' è consentita solo all'interno del blocco' methods' di una classe? – Dave

+0

No. È solo come uso sempre le lezioni. L'esempio dato funziona in entrambi i modi. – Pursuit

+0

La sottoclasse della classe 'handle' lo distingue da una classe" valore ". La sottoclasse di 'handle' produce un comportamento dell'oggetto che è più simile a quello che vedresti in altre lingue. La [documentazione MATLAB sulla differenza tra i due] (http://www.mathworks.com/help/matlab/matlab_oop/comparing-handle-and-value-classes.html) è abbastanza utile. –

Problemi correlati