2017-08-06 14 views
1

プロパティがスーパークラスから継承されるのか、クラス定義で直接定義されるのかを調べる方法はありますか? objがクラスのインスタンスであると仮定すると、私が試みた:matlabクラスメソッドの継承プロパティの検索

properties(obj) 
metaclass(obj) 

答えて

2

照会されたクラスに関する情報が含まmeta.classmetaclassオブジェクトを返します。このmeta.classオブジェクトの有用な特性は、DefiningClassを含むクラスのすべてのプロパティに関する情報を含むPropertyListです。例として、次のクラス定義を使用して

classdef asuperclass 
    properties 
     thesuperproperty 
    end 
end 

classdef aclass < asuperclass 
    properties 
     theclassproperty 
    end 
end 

我々は今、彼らはどこから来たのかを決定するためにaclassのプロパティを照会することができます

tmp = ?aclass; 
fprintf('Class Properties: %s, %s\n', tmp.PropertyList.Name) 
fprintf('''theclassproperty'' defined by: %s\n', tmp.PropertyList(1).DefiningClass.Name) 
fprintf('''thesuperproperty'' defined by: %s\n', tmp.PropertyList(2).DefiningClass.Name) 

返品:

Class Properties: theclassproperty, thesuperproperty 
'theclassproperty' defined by: aclass 
'thesuperproperty' defined by: asuperclass 

これを簡単なヘルパー機能にラップすることができます。例:

function classStr = definedby(obj, queryproperty) 
tmp = metaclass(obj); 
idx = find(ismember({tmp.PropertyList.Name}, queryproperty), 1); % Only find first match 

% Simple error check 
if idx 
    classStr = tmp.PropertyList(idx).DefiningClass.Name; 
else 
    error('Property ''%s'' is not a valid property of %s', queryproperty, tmp.Name) 
end 
end 
関連する問題