在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 的实例来确定此信息。