在Matlab中是否可以在不实例化父类的情况下确定对象的哪些属性被继承?
Is it possible to determine which properties of an object are inherited in Matlab without instantiating the parent class?
我有两个 类,class1 和 class2。 Class2 继承了 class1 的所有属性并具有一些额外的属性,例如:
classdef class1
properties
PropA
end
methods
function instance1 = class1(arg1)
...
end
end
end
classdef class2 < class1
properties
PropB
end
methods
function instance2 = class2(arg2)
instance2 = instance2@class1(arg1)
...
end
end
我调用class2的构造函数
instance2 = class2(arg2)
随后想知道继承了 instance2 的哪些属性(即 PropA)。
是否可以在不创建 class1 的实例并随后比较属性的情况下确定 class2 的哪些属性被继承?如果是这样,执行此操作的有效方法是什么?
您可以通过meta-classes确定此信息。在这种情况下,要查找继承的 class2 的属性(例如,未由 class2 定义):
mcls = ?class2;
allProperties = mcls.PropertyList;
definedByClass2 = [allProperties.DefiningClass] == mcls;
inheritedProperties = allProperties(~definedByClass2);
propertyNames = {inheritedProperties.Name}
请注意,您不需要 class 的实例来确定此信息。
我有两个 类,class1 和 class2。 Class2 继承了 class1 的所有属性并具有一些额外的属性,例如:
classdef class1
properties
PropA
end
methods
function instance1 = class1(arg1)
...
end
end
end
classdef class2 < class1
properties
PropB
end
methods
function instance2 = class2(arg2)
instance2 = instance2@class1(arg1)
...
end
end
我调用class2的构造函数
instance2 = class2(arg2)
随后想知道继承了 instance2 的哪些属性(即 PropA)。
是否可以在不创建 class1 的实例并随后比较属性的情况下确定 class2 的哪些属性被继承?如果是这样,执行此操作的有效方法是什么?
您可以通过meta-classes确定此信息。在这种情况下,要查找继承的 class2 的属性(例如,未由 class2 定义):
mcls = ?class2;
allProperties = mcls.PropertyList;
definedByClass2 = [allProperties.DefiningClass] == mcls;
inheritedProperties = allProperties(~definedByClass2);
propertyNames = {inheritedProperties.Name}
请注意,您不需要 class 的实例来确定此信息。