2011-06-14 58 views
5

我有一个类从多个超类继承,我想获得该类所具有的方法。天真地使用methods()从我正在使用的类以及超类方法返回方法,但我对超类方法不感兴趣。MATLAB - 只列出子类提供的所有方法?

任何想法如何做到这一点?我在MATLAB文档中找不到任何东西。

谢谢!

+0

你在使用新式MCOS类(带有classdef文件)还是旧式类? – 2011-06-14 21:29:12

+0

classdef文件。 – 2011-06-15 20:09:10

回答

3

如果您的子类没有重新实现超类的任何方法(或者如果您忽略重新实现的方法,那么可以),您可以使用函数METHODSSUPERCLASSES来查找不是子类方法的列表也是任何超类的方法。例如:

>> 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' 
+0

我希望有一个优雅的内置来做到这一点,但我有点认为这种类型的解决方案是它会下降。谢谢一堆! – 2011-06-15 20:09:52

2

即使这个问题解决了,让我补充使用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(用于创建该类的空数组)。

+0

您也可以使用类运算符'?'获取元类,如“mt =?hgsetget”中所述。 – Edric 2012-05-30 07:12:20

相关问题