প্রতিটি অবজেক্ট আলাদা

একটি ক্লাসের প্রতিটি অবজেক্ট আলাদা আলাদা। এবং প্রত্যেকটা অবজেক্ট আলাদা মেমোরি লোকেশনে সেভ হয়ে থাকে। যখন একটি অবজেক্ট তৈরি করা হয়, তখন ওই ক্লাসের এট্রিবিউট ও মেথড গুলো কপি আকারে ওই নির্দিষ্ট অবজেক্টের সাথে যুক্ত হয়ে যায়। এবং আমরা যদি কোন অবজেক্ট এর প্রপার্টি বা মেথডকে পরিবর্তন করি তাহলে শুধু ওই অবজেক্ট এর ই পরিবর্তন হবে ওই অবজেক্ট যে ক্লাস দিয়ে তৈরী হয়েছে সেই ক্লাসের কোন পরিবর্তন হবে না এমনকি ওই ক্লাস দিয়ে বানানো অন্য অব্জেক্টকেও কোন পরিবর্তন করতে পারবে না।

class School:
    name=''
    def __init__(self,name):
        self.name=name
#Create First Object              
du= School('Dhaka University')
print(du)
#Create Second Object
bu= School('Bogra University')
print(bu)

আমরা যদি আমাদের অবজেক্ট দুইটি কে জানার জন্য প্রিন্ট মেথড ব্যবহার করি তাহলে দুইটি অবজেক্ট এর জন্য দুইটি মেমোরি লোকেশন দেখতে পাবো। তার মানে আমাদের ক্লাস একটি হলেও অবজেক্ট দুইটি সম্পূর্ণ আলাদা।

Output 👍

<__main__.School object at 0x000002096E7D04D0>
<__main__.School object at 0x000002096E7D0510>

এই কোডটি রান করি

class School:
    name=''
    start = 1947
    def __init__(self,name):
        self.name=name
#Create First Object              
du= School('Dhaka University')
du.start = 1950
print(du.name,du.start)

#Create Second Object
bu= School('Bogra University')
print(bu.name,bu.start)

Output:

Dhaka University 1950
Bogra University 1947

কোডটি লক্ষ্য করলে দেখতে পাবো আমরা যখন ক্লাস ডিফাইন করি তখন ক্লাস এর একটি প্রপার্টি start নাম ডিফাইন করি। এরপর একটি দুইটি অবজেক্ট তৈরী করি। প্রথম অবজেক্ট এর start প্রপার্টির ভ্যালু পরিবর্তন করে দুইটি অবজেক্ট প্রিন্ট করলে প্রথম অবজেক্ট এর start প্রপার্টি ভ্যালু পরিবর্তন হয় কিন্তু অরিজিনাল ক্লাস এর start প্রপার্টির ভ্যালু পরিবর্তন হয় না

যার কারণ দ্বিতীয় অবজেক্ট এর start প্রপার্টির ভ্যালু পরিবর্তন না হওয়ার কারণে সে অরিজিনাল ক্লাসের start প্রপার্টির ভ্যালু ধারণ করেছে। যেহেতু অবজেক্ট শুধু নিজের প্রপার্টি ভ্যালু পরিবর্তন করতে পারে ক্লাসের ভ্যালু পরিবর্তন করতে পারে না তাই দ্বিতীয় অবজেক্ট এই start প্রপার্টির ভ্যালু অরিজিনাল ক্লাসের ভ্যালু এসেছে।

Last updated