如何在面向对象的Matlab中定义派生属性

时间:2013-06-13 14:52:29

标签: matlab oop

我想要一个我可以作为fv=object.field访问的只读字段,但是其值是。{ return是从对象的其他字段计算的(即返回值满足fv==f(object.field2))。

所需的功能与Python中的property函数/装饰器相同。

我记得通过设置properties块的参数来看到这是可能的参考,但是Matlab OOP文档非常分散,我再也找不到了。

2 个答案:

答案 0 :(得分:5)

这称为“依赖”属性。使用派生属性的类的快速示例如下:

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

答案 1 :(得分:2)

您可以使用属性访问方法:http://www.mathworks.co.uk/help/matlab/matlab_oop/property-access-methods.html

要定义get / set函数 - get函数应该允许您返回从其他成员计算的值。上面链接中的“何时使用具有相关属性的设置方法”部分给出了一个示例。