2013-06-13 25 views
5

Tôi muốn trường chỉ đọc mà tôi có thể truy cập là fv=object.field, nhưng giá trị trả về được tính từ các trường khác của đối tượng (tức là giá trị trả về thỏa mãn fv==f(object.field2))).Cách xác định thuộc tính có nguồn gốc trong đối tượng Matlab

Chức năng mong muốn giống như chức năng trang trí/trang trí property bằng Python.

Tôi nhớ khi thấy một tham chiếu có thể thực hiện được bằng cách đặt tham số của khối properties, nhưng tài liệu Matlab OOP bị phân tán đến mức tôi không thể tìm thấy nó nữa.

+0

"Các chức năng mong muốn cũng giống như đối với các chức năng tài sản/trang trí bằng Python. " Có vẻ như bạn nên sử dụng Python. –

+0

@SlaterTyranus Tôi ước tôi có thể. – Dave

Trả lời

4

Đây được gọi là thuộc tính "phụ thuộc". Một ví dụ nhanh chóng của một lớp sử dụng một tài sản được thừa kế là dưới đây:

classdef dependent_properties_example < handle  %Note: Deriving from handle is not required for this example. It's just how I always use classes. 
    properties (Dependent = true, SetAccess = private) 
     derivedProp 
    end 
    properties (SetAccess = public, GetAccess = public) 
     normalProp1 = 0; 
     normalProp2 = 0; 
    end 
    methods 
     function out = get.derivedProp(self) 
      out = self.normalProp1 + self.normalProp2; 
     end 
    end 
end 

Với lớp này được xác định, chúng ta bây giờ có thể chạy:

>> x = dependent_properties_example; 
>> x.normalProp1 = 3; 
>> x.normalProp2 = 10; 
>> x 
x = 
    dependent_properties_example handle 

    Properties: 
    derivedProp: 13 
    normalProp1: 3 
    normalProp2: 10 
+0

Có xuất phát từ 'xử lý' đóng bất kỳ vai trò đặc biệt nào ở đây không? Cú pháp 'get.name' chỉ được phép bên trong khối' phương thức' của một lớp? – Dave

+0

No. Nó chỉ là cách tôi luôn luôn sử dụng các lớp học. Ví dụ cho các tác phẩm một trong hai cách. – Pursuit

+0

Phân lớp lớp 'handle' làm cho điều này khác biệt với một lớp" giá trị ". Phân lớp từ 'handle' mang lại hành vi đối tượng giống với những gì bạn thấy trong các ngôn ngữ khác. [MATLAB tài liệu về sự khác biệt giữa hai] (http://www.mathworks.com/help/matlab/matlab_oop/comparing-handle-and-value-classes.html) là khá hữu ích. –

2

Bạn có thể sử dụng các phương pháp truy cập tài sản: http://www.mathworks.co.uk/help/matlab/matlab_oop/property-access-methods.html

Để xác định get chức năng/bộ - get chức năng nên cho phép bạn trở về giá trị tính toán từ các thành viên khác. Phần "Khi nào sử dụng các phương thức thiết lập với các thuộc tính phụ thuộc" trong liên kết ở trên sẽ đưa ra một ví dụ cho việc này.

Các vấn đề liên quan