Matlab中的属性访问类似于Python _

时间:2016-01-23 00:15:16

标签: python matlab

我希望在Matlab中创建一个类,它将模仿python中的以下代码(在类定义中),但我无法弄清楚使其工作所需的语法和/或权限:

@property
def prop(self):
    return self._prop

@prop.setter
def prop(self, value)"
    'some code'
    self._prop = value

def readprop(self)
    self._prop = 'some code'

重点是readprop方法不调用setter方法,但确实设置了参数的值。

2 个答案:

答案 0 :(得分:1)

这是另一种解决方案,它是对我在Reddit上的问题的回应:

function set.prop(obj, value)
    caller = dbstack;
    if ~isempty(strained(caller(size(caller,1)).name, 'set.prop')
       'do code'
    end
    obj.prop = value
end

此代码将检查最后一个被调用的函数是否是setter或其他函数并采取相应的行动。

答案 1 :(得分:0)

据我所知,这是不受支持的,你能做的最好的事情就是使用两个属性来破解它:

classdef A < handle
    properties
        prop %external property for get and set values
    end
    properties (Access=private)
        prop_ %property which is really used to store the data
    end
    methods 
        function set.prop(obj,x)
            disp('s');
            obj.prop_=x; %write to the other property instead
        end
        function x=get.prop(obj)
            disp('g');
            %obj.prop=obj.prop_;
            x=obj.prop_;
        end
        function readprop(self)
            self.prop_=42;
        end
    end
end