Đôi khi tôi muốn viết các thuộc tính getter cho một đối tượng sao cho lần đầu tiên chúng được gọi, việc nâng hạng nặng được thực hiện một lần, và giá trị đó được lưu và trả về trong các cuộc gọi trong tương lai. Trong mục tiêu-c tôi sẽ sử dụng một ivar hoặc một biến tĩnh để giữ giá trị này. Một cái gì đó như:Mô hình thích hợp trong Python để thực hiện getters lười biếng là gì?
- (id)foo
{
if (_foo == nil)
{
_foo = // hard work to figure out foo
}
return _foo
}
Mẫu này có tương tự được giữ vững trong Python hoặc có cách nào được chấp nhận hơn không? Về cơ bản tôi cũng vậy. Những gì tôi không thích về giải pháp của tôi là đối tượng của tôi bị lộn xộn với các giá trị và getters cho các giá trị đó:
def foo(self):
if not hasattr(self, "mFoo":
self.mFoo = # heavy lifting to compute foo
return self.mFoo
cảm ơn, @property không tham gia lớp học mặc dù vậy? –
@ darren thực sự nó không, đó là những gì tôi nhận được để đăng bài ở phía bên trái của nửa đêm. :) Tôi đã sửa nó ngay bây giờ. – lvc