Sử dụng trang trí LRU cache tìm thấy ở đây: http://code.activestate.com/recipes/578078-py26-and-py30-backport-of-python-33s-lru-cache/Python LRU cache Decorator mỗi Instance
from lru_cache import lru_cache
class Test:
@lru_cache(maxsize=16)
def cached_method(self, x):
return x + 5
tôi có thể tạo ra một phương pháp học được trang trí với điều này nhưng nó kết thúc việc tạo ra một bộ nhớ cache toàn cầu áp dụng cho tất cả trường của lớp Test. Tuy nhiên, ý định của tôi là tạo một bộ nhớ cache cho từng trường hợp. Vì vậy, nếu tôi đã thực hiện 3 bài kiểm tra, tôi sẽ có 3 bộ nhớ cache LRU thay vì 1 bộ nhớ cache LRU cho cả 3 trường hợp. Chỉ có một dấu hiệu duy nhất cho thấy điều này đang xảy ra là khi gọi cache_info() trên các phương thức trang trí lớp khác nhau, tất cả đều trả về cùng một số liệu thống kê bộ đệm (rất khó xảy ra khi chúng được tương tác với rất khác nhau). đối số):
CacheInfo(hits=8379, misses=759, maxsize=128, currsize=128)
CacheInfo(hits=8379, misses=759, maxsize=128, currsize=128)
CacheInfo(hits=8379, misses=759, maxsize=128, currsize=128)
Có một trình trang trí hoặc thủ thuật cho phép tôi dễ dàng khiến trình trang trí này tạo bộ nhớ cache cho từng cá thể lớp không?
Hãy nhớ rằng, một trang trí chỉ là cú pháp đường cho phương thức 'def: pass; method = decorate (phương pháp) '. Vì vậy, bạn có thể dịch máy móc này để tạo phương pháp được trang trí trong '__init__' của bạn. –
Bạn có chắc chắn rằng bạn biết "phương pháp lớp" là gì? Bởi vì tôi nghĩ bạn tìm kiếm một phương pháp bình thường. Nếu một phương thức lớp là một cá thể cụ thể, theo định nghĩa, một phương thức bình thường của một cá thể. Hoặc tại sao chính xác bạn thậm chí cần một phương pháp lớp học? Hoặc tại sao bạn muốn một bộ nhớ cache "cho mỗi trường hợp"? – Mayou36