如何从静态方法访问属性

Posted

技术标签:

【中文标题】如何从静态方法访问属性【英文标题】:How to access property from static method 【发布时间】:2021-04-06 18:41:25 【问题描述】:

正如标题所说,我正在使用构造函数设置一个属性,并希望稍后以静态 get 函数的形式访问该属性。我将如何在 MATLAB 中执行此操作?

classdef Wrapper
    
    properties(Access=public)
        dataStruct
    end
    
    methods
    
        function data = Wrapper(filePath)
            if nargin == 1
                data.dataStruct=load(filePath)
            end
            
        end
    end
        
    methods(Static)
        function platPosition = getPlatPosition()
            platPosition = dataStruct.someField
        end
    end
end

--------------------------
import pkg.Wrapper.*
test = Wrapper('sim.mat')
pos = test.getPlatPosition

【问题讨论】:

【参考方案1】:

据我所知,MATLAB 没有像其他 OOP 语言 [ref] 这样的静态属性。在静态方法中只能使用静态属性。在 MATLAB 类中最接近静态属性的是 Constant 属性。缺点是常量属性必须初始化并且是只读的。在静态方法中,您可以使用类名访问只读/常量属性。

classdef Wrapper
    
    properties(Constant=true)
        dataStruct=load('\path\to\sim.mat');
    end
    
    methods
        function data = Wrapper()   
            %do something with object
        end
    end
        
    methods(Static=true)
        function platPosition = getPlatPosition()
            platPosition = Wrapper.dataStruct.Fieldname;
        end
    end
end

在您的情况下,您可以接受 object 作为静态方法的输入参数。

classdef Wrapper
    
    properties(Access=public)
        dataStruct
    end
    
    methods
    
        function data = Wrapper(filePath)
            if nargin == 1
                data.dataStruct=load(filePath)
            end
            
        end
    end
        
    methods(Static)
        function platPosition = getPlatPosition(obj)
            platPosition = obj.dataStruct.someField
        end
    end
end
--------------------------
import pkg.Wrapper.*
test = Wrapper('sim.mat')
pos = test.getPlatPosition(test);

【讨论】:

以上是关于如何从静态方法访问属性的主要内容,如果未能解决你的问题,请参考以下文章

flutter从入门到精通二

php静态方法

php父类中访问子类的静态属性

php中静态方法的使用

react中如何在静态方法中调用静态属性

php static静态属性和静态方法