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