ক্লিনআপ গ্লোবালদের কোনোটিই নয়-এ সেট করার মাধ্যমে ঘটবে৷ অধিবেশন শেষে স্থানীয়রা আত্মহারা। Python দ্বারা ডাকা ফাংশন __del__ গ্লোবালকে None এ সেট করে।
নিম্নলিখিত কোডটি বিবেচনা করুন যেখানে প্রদত্ত শ্রেণির সমস্ত বস্তু পরিষ্কার করা আছে −
উদাহরণ
class Counter: Count = 0 # This is the count of objects of this class def __init__(self, name): self.name = name print name, 'created' Counter.Count += 1 def __del__(self): print self.name, 'deleted' Counter.Count -= 1 if Counter.Count == 0: print 'Last Counter object deleted' else: print Counter.Count, 'Counter objects remaining' x = Counter("First") del x
চূড়ান্ত ডেল ছাড়া, আপনি একটি ব্যতিক্রম পাবেন।
__del__ −
সম্পর্কিত পাইথন ডক্স থেকেসতর্কতা:__del__() পদ্ধতিগুলি যে অনিশ্চিত পরিস্থিতিতে ব্যবহার করা হয় তার কারণে, তাদের কার্যকর করার সময় ঘটে যাওয়া ব্যতিক্রমগুলি উপেক্ষা করা হয়, এবং পরিবর্তে sys.stderr-এ একটি সতর্কতা প্রিন্ট করা হয়। এছাড়াও, যখন __del__() একটি মডিউল মুছে ফেলার প্রতিক্রিয়া হিসাবে আহ্বান করা হয় (যেমন, যখন প্রোগ্রামটি কার্যকর করা হয়), __del__() পদ্ধতি দ্বারা উল্লেখ করা অন্যান্য গ্লোবাল ইতিমধ্যেই মুছে ফেলা হতে পারে। এই কারণে, __del__() পদ্ধতিগুলি বাহ্যিক ইনভেরিয়েন্টগুলি বজায় রাখার জন্য প্রয়োজনীয় সর্বনিম্ন ন্যূনতম করা উচিত৷
del-কে স্পষ্টভাবে কল না করে, __del__ শুধুমাত্র প্রোগ্রামের শেষে কল করা হয়, __del__ ডাকার সময় কাউন্টার এবং/অথবা গণনা ইতিমধ্যেই GC-ed হয়ে থাকতে পারে (যে ক্রমে বস্তুগুলি সংগ্রহ করা হয় তা নির্ধারক নয়)। ব্যতিক্রম মানে কাউন্টার ইতিমধ্যে সংগ্রহ করা হয়েছে. আপনি __del__ এর সাথে বিশেষভাবে অভিনব কিছু করতে পারবেন না।
এখানে দুটি সম্ভাব্য সমাধান আছে।
-
একটি স্পষ্ট চূড়ান্ত পদ্ধতি ব্যবহার করুন, যেমন ফাইল অবজেক্টের জন্য close()।
-
দুর্বল রেফারেন্স ব্যবহার করুন।