__del__() মেথডটি একটি ডিস্ট্রাক্টর মেথড হিসেবে পরিচিত। এটি কল হয় যখন একটি অবজেক্ট গার্বেজ কালেক্ট হয়, যা হয় সেটির সকল রেফারেন্স ডিলিট হওয়ার পর।
একটি সিম্পল কেসে এটি হতে পারে ঠিক del x এর পর বা, যদি x একটি লোকাল ভেরিয়েবল হয়, তবে ফাংশন শেষ হওয়ার পর। বিশেষ করে, যদি সার্কুলার রেফারেন্স না থাকে, CPython (যেটি স্ট্যান্ডার্ড পাইথন ইমপ্লিমেন্টেশন) আমার কথা বললে অবজেক্টটি ডিস্ট্রয় না হওয়া পর্যন্ত অপেক্ষা করতে পারে।
পাইথন গার্বেজ কালেকশনের একমাত্র প্রোপার্টি হলো এটি হয় সকল রেফারেন্স ডিলিট হওয়ার পর, তাই এটি অয়বশ্যক ঠিক তারপর হবেনা এবং এমনকি কখনও হবেনা।
আরো, ভেরিয়েবলগুলো অনেক কারণlardan অনেক দিন লাইভ থাকতে পারে, উদাহরণস্বরূপ, একটি প্রোপাগেটিং এক্সেপশন বা মডিউল ইনট্রোসপেকশন ভেরিয়েবল রেফারেন্স কাউন্ট ০-র চেয়ে বড় রাখতে পারে। এছাড়া, ভেরিয়েবল সার্কুলার রেফারেন্সের অংশ হতে পারে - গার্বেজ কালেকশন অন করে থাকলে CPython অধিকাংশ, কিন্তু সকল নয়, সাইকেল ব্রেক করে, এবং সেটিও পিরিয়ডিক্যালি।
__del__-এর বৈধ ইউজ কেস রয়েছে: উদাহরণস্বরূপ, যদি একটি অবজেক্ট X অন্য অবজেক্ট Y-কে রেফার করে এবং একটি গ্লোবাল ক্যাশে Y-র রেফারেন্স কপি রাখে (cache['X -> Y'] = Y) তবে X.__del__-ও ক্যাশে এন্ট্রিটি ডিলিট করলে পোলাইট হবে।
যদি আপনি জানেন যে ডিস্ট্রাক্টর একটি রিকোয়ার্ড ক্লিনআপ প্রদান করে, তবে আপনি সেটি ডায়রেক্টলি কল করতে চাইতে পারেন, x.__del__()।