我有一個類從多個超類繼承,我想獲得該類所具有的方法。天真地使用methods()
從我正在使用的類以及超類方法返回方法,但我對超類方法不感興趣。MATLAB - 只列出子類提供的所有方法?
任何想法如何做到這一點?我在MATLAB文檔中找不到任何東西。
謝謝!
我有一個類從多個超類繼承,我想獲得該類所具有的方法。天真地使用methods()
從我正在使用的類以及超類方法返回方法,但我對超類方法不感興趣。MATLAB - 只列出子類提供的所有方法?
任何想法如何做到這一點?我在MATLAB文檔中找不到任何東西。
謝謝!
如果您的子類沒有重新實現超類的任何方法(或者如果您忽略重新實現的方法,那麼可以),您可以使用函數METHODS和SUPERCLASSES來查找不是子類方法的列表也是任何超類的方法。例如:
>> obj = 'hgsetget'; %# A sample class name
>> supClasses = superclasses(obj)
supClasses =
'handle' %# Just one superclass, but what follows should handle more
>> supMethods = cellfun(@methods,supClasses,... %# Find methods of superclasses
'UniformOutput',false);
>> supMethods = unique(vertcat(supMethods{:})); %# Get a unique list of
%# superclass methods
>> subMethods = setdiff(methods(obj),supMethods) %# Find methods unique to the
%# subclass
subMethods =
'get'
'getdisp'
'set'
'setdisp'
我希望有一個優雅的內置來做到這一點,但我有點認爲這種類型的解決方案是它會下降。謝謝一堆! – 2011-06-15 20:09:52
即使這個問題解決了,讓我補充使用meta.class
能力,另一種答案:
%# some class name
clname = 'hgsetget';
%# obtain class meta-info
mt = meta.class.fromName(clname);
%# get name of class defining each method
cdef = arrayfun(@(c)c.Name, [mt.MethodList.DefiningClass], 'Uniform',false);
%# keep only methods that are defined in the subclass
subMethods = {mt.MethodList(ismember(cdef,clname)).Name}
這個例子的結果是:
subMethods =
'set' 'get' 'setdisp' 'getdisp' 'empty'
注意如何結果還包括所有非抽象類都具有的靜態方法empty
(用於創建該類的空數組)。
您也可以使用類運算符'?'獲取元類,如「mt =?hgsetget」中所述。 – Edric 2012-05-30 07:12:20
你在使用新式MCOS類(帶有classdef文件)還是舊式類? – 2011-06-14 21:29:12
classdef文件。 – 2011-06-15 20:09:10