পাইথনে উইক রেফারেন্স তৈরি করতে হলে, আমাদের weakref মডিউল ব্যবহার করতে হবে। weakref অবজেক্টকে জীবিত রাখার জন্য যথেষ্ট নয়। উইক রেফারেন্সের একটি বেসিক ব্যবহার হলো বড় অবজেক্টের জন্য ক্যাশ বা ম্যাপিং বাস্তবায়ন করা।
এই মডিউল ব্যবহার করতে হলে, আমাদের এটি ইম্পোর্ট করতে হবে -
import weakref
সব অবজেক্ট উইকলি রেফারেন্স করা যায় না। কিছু বিল্ট-ইন টাইপ যেমন টাপল বা ইন্ট, উইক রেফারেন্স সাপোর্ট করে না। উইক রেফারেন্স সংক্রান্ত কিছু ক্লাস এবং মেথড রয়েছে।
weakref.ref(object[, callback]) ক্লাস
এটি অবজেক্টের একটি উইক রেফারেন্স ফেরত দেবে। যখন রেফারেন্ট এখনো জীবিত, আসল অবজেক্ট রেফারেন্স অবজেক্ট কল করে রিট্রিভ করা যায়, কিন্তু যখন আসল অবজেক্ট উপস্থিত নয়, তবে এটি None ফেরত দেবে।
weakref.proxy(object[, callback]) মেথড
এই মেথড অবজেক্টের জন্য একটি প্রক্সি ফেরত দেবে, যা উইক রেফারেন্স ব্যবহার করে। রিটার্নড অবজেক্ট হতে পারে ProxyType বা CallableProxyType।
weakref.getweakrefcount(object) মেথড
এই মেথড অবজেক্টের উইক রেফারেন্স এবং প্রক্সির সংখ্যা ফেরত দেবে।
weakref.getweakrefs(object) মেথড
এই মেথড উইক রেফারেন্স এবং প্রক্সি অবজেক্টের একটি লিস্ট ফেরত দেবে।
উদাহরণ কোড
import weakref
class my_list(list):
pass
new_list = my_list('String') # my_list ক্লাস ব্যবহার করে একটি লিস্ট ডিফাইন
print(new_list)
weak_ref = weakref.ref(new_list)
new_weak_list = weak_ref()
new_proxy = weakref.proxy(new_list)
print(new_weak_list)
print('The object using proxy: ' + str(new_proxy))
if new_list is new_weak_list:
print("There is a weak reference")
print('The Number of Weak references: ' + str(weakref.getweakrefcount(new_list)))
del new_list, new_weak_list # দুটি অবজেক্ট ডিলিট
print("The weak reference is: " + str(weak_ref()))
আউটপুট
['S', 't', 'r', 'i', 'n', 'g'] ['S', 't', 'r', 'i', 'n', 'g'] The object using proxy: ['S', 't', 'r', 'i', 'n', 'g'] There is a weak reference The Number of Weak references: 2 The weak reference is: None