我希望在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方法,但确实设置了参数的值。
答案 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