1
プロパティがスーパークラスから継承されるのか、クラス定義で直接定義されるのかを調べる方法はありますか? obj
がクラスのインスタンスであると仮定すると、私が試みた:matlabクラスメソッドの継承プロパティの検索
properties(obj)
metaclass(obj)
プロパティがスーパークラスから継承されるのか、クラス定義で直接定義されるのかを調べる方法はありますか? obj
がクラスのインスタンスであると仮定すると、私が試みた:matlabクラスメソッドの継承プロパティの検索
properties(obj)
metaclass(obj)
照会されたクラスに関する情報が含まmeta.class
metaclass
オブジェクトを返します。この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