2011-06-14 8 views
5

मेरे पास एक वर्ग है जो एकाधिक सुपरक्लास से विरासत में मिलता है, और मैं कक्षाओं के तरीकों को प्राप्त करना चाहता हूं। methods() का उपयोग करके निष्क्रिय रूप से क्लास के साथ-साथ सुपरक्लास विधियों के साथ काम करने के तरीके भी लौटाते हैं, लेकिन मुझे सुपरक्लास विधियों में रूचि नहीं है।MATLAB - केवल उपclass द्वारा आपूर्ति की गई सभी विधियों की सूची?

कोई विचार यह कैसे करना है? मुझे MATLAB दस्तावेज़ में कुछ भी नहीं मिला।

धन्यवाद!

+0

क्या आप नई शैली एमसीओएस कक्षाओं (क्लासडेफ फाइलों के साथ), या पुरानी शैली कक्षाओं का उपयोग कर रहे हैं? –

+0

classdef फाइलें। –

उत्तर

3

यदि आपका सबक्लास सुपरक्लास के किसी भी तरीके को पुन: कार्यान्वित नहीं करता है (या यदि आप अनुपूरक तरीकों को अनदेखा करने के साथ ठीक हैं), तो आप उप-वर्ग विधियों की सूची खोजने के लिए METHODS और SUPERCLASSES फ़ंक्शंस का उपयोग कर सकते हैं किसी भी सुपरक्लास के तरीके भी। उदाहरण के लिए:

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

इस उदाहरण के लिए परिणाम:

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

मैं उम्मीद कर रहा था कि ऐसा करने के लिए एक सुरुचिपूर्ण अंतर्निहित था, लेकिन मुझे लगता है कि इस प्रकार का समाधान यह है कि यह नीचे आ जाएगा। बहुत बहुत धन्यवाद! –

2

हालांकि इस सवाल का समाधान हो जाता है, मुझे meta.class क्षमताओं का उपयोग एक और उत्तर जोड़ने

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

नोट कैसे परिणाम स्थिर विधियों empty भी शामिल हैं जो सभी गैर-सार वर्गों (उस वर्ग की खाली सरणी बनाने के लिए उपयोग किया जाता है)।

+0

आप क्लास ऑपरेटर '?' का उपयोग करके मेटाक्लास भी प्राप्त कर सकते हैं, जैसा कि "mt =? Hgsetget" में है। – Edric

संबंधित मुद्दे