2011-06-14 21 views
5

Birden çok üst sınıftan miras alan bir sınıfım var ve sınıfın sahip olduğu yöntemleri almak istiyorum. Nail methods() kullanarak, birlikte çalıştığım sınıfın yanı sıra süper sınıf yöntemleri yöntemlerini döndürür, ancak süper sınıfı yöntemleri ile ilgilenmiyorum.MATLAB - sadece alt sınıf tarafından sağlanan tüm yöntemleri listeleyin?

Bunu nasıl yapacağınıza dair bir fikriniz var mı? MATLAB belgelerinde hiçbir şey bulamadım.

Teşekkürler!

+0

Yeni stil MCOS sınıfları (classdef dosyalarıyla birlikte) veya eski stil sınıfları kullanıyor musunuz? –

+0

classdef dosyaları. –

cevap

3

alt sınıf üst sınıfı yöntemlerinden herhangi reimplement etmezse (veya reimplemented yöntemleri göz ardı ince iseniz), değil alt sınıf yöntemlerinin bir listesini bulmak için fonksiyonları METHODS ve SUPERCLASSES kullanabilirsiniz ayrıca süper-sınıfların herhangi birinin yöntemleri. Örneğin: nasıl sonuç

subMethods = 
    'set' 'get' 'setdisp' 'getdisp' 'empty' 

Not:

%# 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} 

Bu örnek için sonuç: Bu soru çözüldü rağmen

>> 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

Bunu yapmak için zarif bir yerleşik olduğunu umuyordum, ama bu tür bir çözümün aşağı ineceğini düşündüm. Çok teşekkürler! –

2

, beni meta.class özelliklerini kullanarak başka bir yanıt ekleyelim Ayrıca, soyut olmayan tüm sınıfların (bu sınıfın boş bir dizisini oluşturmak için kullanılır) sahip olduğu empty statik yöntemlerini içerir.

+0

Ayrıca, "mt =? Hgsetget" deki "?" Sınıf operatörünü kullanarak meta sınıfı alabilirsiniz. – Edric

İlgili konular