কম্পিউটার টিউটোরিয়াল

পাইথন অবজেক্ট সঠিকভাবে ক্লিন আপ কীভাবে করবেন?


ক্লিনআপ গ্লোবালগুলোর সাথে হয় সেগুলোকে None সেট করে। লোকালগুলো সেশন শেষে সেলফ-ডেস্ট্রাক্ট হয়। __del__ ফাংশন পাইথন দ্বারা কল হয়ে গ্লোবালগুলোকে None সেট করে।

নিচের কোডে দেওয়া ক্লাসের সকল অবজেক্টের ক্লিনআপ দেখানো হলো:

উদাহরণ

class Counter:
    Count = 0  # এই ক্লাসের অবজেক্টের কাউন্ট
    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__ সম্পর্কে সতর্কতা:

সতর্কতা: __del__() মেথড যেসব প্রিক্যারিয়াস পরিস্থিতিতে আহ্বান করা হয়, সেগুলোর এক্সিকিউশন време এক্সেপশন হলে সেগুলো ইগনোর হয়, এবং স্ট্র 쓰는 대신 ওয়ার্নিং প্রিন্ট হয়। এছাড়া, যখন __del__() মডিউল ডিলিট হওয়ার রেসপন্সে আহ্বান করা হয় (যেমন প্রোগ্রাম এক্সিকিউশন শেষে), __del__() মেথড দ্বারা রেফারেন্সড অন্যান্য গ্লোবাল ইতিমধ্যে ডিলিট হয়ে যেতে পারে। এই কারণেই, __del__() মেথডগুলো এক্সটার্নেল ইনভেরিয়েন্ট মেইনটেইন করার জন্য অপরিহার্য ন্যূনতম কাজই করা উচিত।

স্পষ্ট del কল ছাড়া, __del__ প্রোগ্রাম শেষে কল হয়, Counter এবং/অথবা Count ইতিমধ্যে GC-ড হয়ে যেতে পারে __del__ কল হওয়ার আগে (অবজেক্ট কালেকশনের অর্ডার ডিটারমিনিস্টিক নয়)। এক্সেপশন মানে Counter ইতিমধ্যে কালেক্ট হয়েছে। আপনি __del__ দিয়ে কিছু খাস ফ্যান্সি করতে পারবেন না।

এখানে দুটি সম্ভাব্য সমাধান আছে।

  • এক্সপ্লিসিট ফাইনালাইজার মেথড ব্যবহার করুন, যেমন ফাইল অবজেক্টের জন্য close()।

  • ইউজ করুন weak references।

  1. পাইথনে লিস্ট থেকে একটি অবজেক্ট রিমুভ করার পদ্ধতি

  2. পাইথনে নেস্টেড ডিকশনারি তৈরি করার পদ্ধতি

  3. পাইথনে ডিকশনারির ভিতরে ডিকশনারি ডিফাইন করার পদ্ধতি

  4. পাইথন ফাংশন থেকে JSON অবজেক্ট রিটার্ন করা