Tôi muốn tạo trang trí hoạt động giống như thuộc tính, chỉ gọi hàm trang trí một lần và các cuộc gọi tiếp theo luôn trả về kết quả của cuộc gọi đầu tiên. Ví dụ:Cách tạo trình trang trí để khởi tạo lười của thuộc tính
def SomeClass(object):
@LazilyInitializedProperty
def foo(self):
print "Now initializing"
return 5
>>> x = SomeClass()
>>> x.foo
Now initializing
5
>>> x.foo
5
Ý tưởng của tôi là viết một trang trí tùy chỉnh cho việc này. Vì vậy, tôi bắt đầu, và điều này là như thế nào đến nay tôi đến:
class LazilyInitializedProperty(object):
def __init__(self, function):
self._function = function
def __set__(self, obj, value):
raise AttributeError("This property is read-only")
def __get__(self, obj, type):
# problem: where to store the value once we have calculated it?
Như bạn thấy, tôi không biết nơi để lưu trữ giá trị được lưu trữ. Giải pháp đơn giản nhất có vẻ là chỉ duy trì một từ điển, nhưng tôi tự hỏi nếu có một giải pháp thanh lịch hơn cho việc này.
EDIT Xin lỗi vì điều đó, tôi quên đề cập đến rằng tôi muốn thuộc tính chỉ đọc.
Đây có thể là một bản sao của câu hỏi của tôi: [Python sở hữu lười biếng trang trí] (http://stackoverflow.com/questions/3012421/python-lazy-property-decorator) – detly
Bạn nói đúng nó được. Không nhìn thấy nó trong hộp gợi ý. Bỏ phiếu để đóng. –