সম্প্রতি আমি একটি বিদ্যমান কোড বেসটি পেরিয়েছি যেখানে অনেকগুলি ক্লাস রয়েছে যেখানে উদাহরণের বৈশিষ্ট্যগুলি একটি ডাটাবেসে সঞ্চিত মানগুলি প্রতিফলিত করে। আমি এই বৈশিষ্ট্যগুলির অনেকগুলি রিফ্যাক্টর করেছি যাতে তাদের ডাটাবেস অনুসন্ধানগুলি স্থগিত করা যায়, অর্থাত্। কনস্ট্রাক্টরটিতে আরম্ভ করা হবে না কেবল প্রথম পড়ার পরে। এই বৈশিষ্ট্যগুলি উদাহরণস্বরূপ জীবদ্দশায় পরিবর্তিত হয় না, তবে তারা প্রথম বার গণনা করার জন্য সত্যই বাধা এবং কেবলমাত্র বিশেষ ক্ষেত্রে for সুতরাং ডাটাবেস থেকে পুনরুদ্ধার করার পরে এগুলিও ক্যাশে করা যায় (এটি অতএব স্মৃতিচারণের সংজ্ঞা অনুসারে ফিট করে যেখানে ইনপুটটি কেবল "কোনও ইনপুট নয়")।
আমি নিজেকে বিভিন্ন ক্লাসে বিভিন্ন বৈশিষ্ট্যের জন্য বার বার নীচের কোডের স্নিপেট টাইপ করতে দেখছি:
class testA(object):
def __init__(self):
self._a = None
self._b = None
@property
def a(self):
if self._a is None:
# Calculate the attribute now
self._a = 7
return self._a
@property
def b(self):
#etc
পাইথনে ইতিমধ্যে এটি করার জন্য কি কোনও বিদ্যমান সাজসজ্জা রয়েছে যার সম্পর্কে আমি কেবল অজানা? বা, কোনও সাজসজ্জার সংজ্ঞা দেওয়ার পক্ষে যুক্তিসঙ্গত সহজ উপায় আছে যা এটি করে?
আমি পাইথন 2.5 এর অধীনে কাজ করছি তবে ২.6 উত্তর এখনও উল্লেখযোগ্য হতে পারে যদি তা উল্লেখযোগ্যভাবে আলাদা হয়।
বিঃদ্রঃ
পাইথন এর জন্য প্রচুর প্রস্তুত সজ্জিত করার আগে এই প্রশ্ন জিজ্ঞাসা করা হয়েছিল। আমি এটি কেবলমাত্র পরিভাষা সংশোধন করার জন্য আপডেট করেছি।
functools.lru_cache()।