Accessing properties in a class
26 views (last 30 days)
Show older comments
I am trying to figure out if there is a way to set the value of variables defined in `classname` by calling the methods defined in it via the main function. I am passing input arguments to class from main function and after that from the terinal when I do , I don't see the values assigned to properties in the output.
classdef classname
properties
PropName
propname2
end
methods(Static)
function obj = fun1(arg1,arg2)
obj.PropName = arg1;
obj.propname2 = arg2;
end
end
end
function main(arg)
classname.fun1(arg,arg)
end
After calling classname from main, I try accessing the properties in it .
a=classname
returns
a =
classname with properties:
PropName: []
propname2: []
I expected it to return
classname with properties:
PropName: 10
propname2: 10
0 Comments
Answers (2)
Jakeb Chouinard
on 3 Aug 2021
Edited: Jakeb Chouinard
on 3 Aug 2021
Since static methods refer to the class as a whole rather than its instances, I don't believe you would be able to set properties using a static method. This is partially because you're calling obj in the function, but in application, this obj doesn't exist as an instance of the calss, so its properties, or that of the class, can't be set by this method. My suggestion would be to set these values using their constructor function or to have them stored as constants within the class that can be overwritten:
classdef classname
properties
PropName = 10;
PropName2 = 10;
end
methods
function obj = changeProps(newArg1, newArg2)
obj.PropName = newArg1;
obj.PropName2 = newArg2;
end
end
end
*Note: Initial property values in class declaration (the ones set under properties above) cannot be variables
Or:
classdef classname
properties
PropName;
PropName2;
end
methods
function obj = classname(arg1, arg2)
obj.PropName = arg1;
obj.PropName2 = arg2;
end
function obj = changeProps(nArg1, nAarg2)
obj.PropName = nArg1;
obj.PropName2 = nArg2;
end
end
end
*nArg is short for new argument
Cheers,
Jakeb
0 Comments
per isakson
on 3 Aug 2021
Edited: per isakson
on 3 Aug 2021
There is nothing special with the name obj, it's just a name. The assignments in the method, fun1, creates a structure (named obj ) with two fields.
I assume that you tried a static method to make the one-liner, classname.fun1(arg,arg), possible.
classname_2 illustrates how to do it with an ordinary method. That requires two lines.
classname_3 illustrates a trick that makes the one-liner possible. However, DON'T USE IT. I'm convinced it will eventually cause trouble. I included it to show that the class instance, obj, must be created before it's used. If it isn't passed to the method, it can be created locally (it seems).
classname.fun1( 1, 2 )
%
a2 = classname_2;
a2.fun1( 3, 4 )
%
classname_3.fun1( 5, 6 )
0 Comments
See Also
Categories
Find more on Construct and Work with Object Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!