Is is possible to control the order of inherited class properties?

43 vues (au cours des 30 derniers jours)
Harry Dymond
Harry Dymond le 19 Juin 2020
Modifié(e) : Harry Dymond le 19 Juin 2020
Consider two simple classes, where one inherits from the other:
First class:
classdef Example_Class_1 < handle
properties
Property1
Property2
end
end
Second class:
classdef Example_Class_2 < Example_Class_1
properties
Property3
end
end
Now, if I create an Example_Class_2 object, its properties are listed as follows:
Example_Class_2
ans =
Example_Class_2 with properties:
Property3: []
Property1: []
Property2: []
Is there some alternative syntax I can use when defining Example_Class_2, such that Property1 and Property 2 (the inherited properties) appear before Property3 when an Example_Class_2 object is created?

Réponse acceptée

Harry Dymond
Harry Dymond le 19 Juin 2020
Following the advice of William Warriner, here is what can be done. Change Example_Class_2 as follows:
classdef Example_Class_2 < Example_Class_1 & matlab.mixin.CustomDisplay
properties
Property3
end
methods (Hidden)
function value = properties( obj )
propList = sort( builtin("properties", obj) );
if nargout == 0
disp(propList);
else
value = propList;
end
end
function value = fieldnames( obj )
value = sort( builtin( "fieldnames", obj ) );
end
end
methods (Access = protected)
function group = getPropertyGroups( obj )
props = properties( obj );
group = matlab.mixin.util.PropertyGroup( props );
end
end
end
Now, properties are listed in alphabetical order, both when displayed on the command line, and when returned as a cell array (with e.g. propList = properties(Example_Class_2))
Of course, you don't have to use sort() to re-order the property list in the properties method. In my case, I needed a different ordering and just used
propList = builtin("properties", obj);
propList = propList([<my custom indices order>]);

Plus de réponses (2)

Steven Lord
Steven Lord le 19 Juin 2020
Have your class inherit from matlab.mixin.CustomDisplay and override the getPropertyGroups method. See the "Customize Property Display" section on this documentation page for an example.
  1 commentaire
Harry Dymond
Harry Dymond le 19 Juin 2020
Hi Steven, thanks for the reply. Your answer appeared whilst I was working on mine!

Connectez-vous pour commenter.


Ashwin
Ashwin le 19 Juin 2020
Although there isn’t any explicit way by which the order of printing of the properties can be changed, you can attempt to overload the properties() function in order to print the properties of a required class in the order you require it. The below question does the same for dynamic properties, it could be of reference.
However, the process does seem rather tedious to reproduce.
  1 commentaire
Harry Dymond
Harry Dymond le 19 Juin 2020
Modifié(e) : Harry Dymond le 19 Juin 2020
Thanks for the speedy reply! Actually, the answer on that thread from William Warriner is very simple to implement - see my accepted answer.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Third-Party Cluster Configuration dans Help Center et File Exchange

Produits


Version

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by