LRU कैश डेकोरेटर का उपयोग करते हुए पाया गया: http://code.activestate.com/recipes/578078-py26-and-py30-backport-of-python-33s-lru-cache/अजगर LRU कैश डेकोरेटर प्रति उदाहरण
from lru_cache import lru_cache
class Test:
@lru_cache(maxsize=16)
def cached_method(self, x):
return x + 5
मैं इस के साथ एक सजाया वर्ग विधि बना सकते हैं, लेकिन यह एक वैश्विक कैश सभी उदाहरणों पर लागू होने वाला बनाने समाप्त होता है कक्षा परीक्षण के। हालांकि, मेरा इरादा प्रति उदाहरण कैश बनाना था। तो अगर मैं 3 टेस्ट को चालू करना चाहता था, तो मेरे पास 3 एलआरयू कैश के बजाय 3 एलआरयू कैश होंगे जो सभी 3 उदाहरणों के लिए होगा।
एकमात्र संकेत यह है कि यह हो रहा है कि यह हो रहा है कि विभिन्न वर्ग उदाहरणों पर cache_info() को सजाए गए तरीकों पर कॉल करते समय, वे सभी एक ही कैश आंकड़े वापस लौटाते हैं (जो होने की संभावना नहीं है क्योंकि उन्हें बहुत अलग तरीके से बातचीत की जा रही है तर्क):
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)
वहाँ एक डेकोरेटर या चाल है कि मुझे आसानी से प्रत्येक वर्ग के उदाहरण के लिए एक कैश बनाने के लिए इस डेकोरेटर का कारण करने की अनुमति होगी है?
याद रखें, एक सजावटी 'डीफ विधि के लिए सिंटैक्स चीनी है: पास; विधि = सजाने (विधि) '। तो आप अपने '__init__' में सजाए गए विधि को बनाने के लिए यांत्रिक रूप से इसका अनुवाद कर सकते हैं। –
क्या आप वाकई जानते हैं कि आप जानते हैं कि "क्लास विधि" क्या है? क्योंकि मुझे लगता है कि आप एक सामान्य विधि की तलाश में हैं। यदि एक वर्ग विधि उदाहरण विशिष्ट है, तो परिभाषा के अनुसार, एक उदाहरण की एक सामान्य विधि है। या आपको वास्तव में कक्षा विधि की आवश्यकता क्यों है? या आप "प्रति-उदाहरण" कैश क्यों चाहते हैं? – Mayou36