首先列出具有超类属性的类属性

时间:2017-10-26 22:42:20

标签: matlab class properties cell-array

在Matlab中,当我调用properties('MyClass')时,它会创建一个首先包含子类属性的单元格数组,并且最后使用超类属性。是否有可能以相反的方式使用数组,首先使用超类属性?

我不想反转整个数组,因为它会颠倒超级/子类中属性的顺序。

我想转

'Sub1','Sub2','Super1','Super2'

'Super1','Super2', 'Sub1','Sub2'

1 个答案:

答案 0 :(得分:2)

阐述我的评论: 元类包含有关属性的信息以及父类定义它们的信息。然后想法是通过属性,定义类,收集属性名称,同时颠倒类顺序,但在类中保持顺序。

mkl = meta.class.fromName('MyClass');

% get number of properties and populate cell to hold names
n = numel(mkl.PropertyList);
pl = cell(n, 2);

for ii = 1:n
    pl{ii, 1} = mkl.PropertyList(ii).Name;
    pl{ii, 2} = mkl.PropertyList(ii).DefiningClass.Name;
end

% find unique defining classes, keeping their sort order
klasses = unique(pl(:,2), 'stable');
new_prop_list = {};
% go through class list in reverse, find defined properties, and append them 
for ii = numel(klasses):-1:1
    klass = klasses{ii};
    kl_prop = strcmpi(klass, pl(:,2));
    new_prop_list = [new_prop_list; pl(kl_prop, 1)];
end