পাইথন ক্লাসেস এবং অবজেক্ট (Python Classes and Objects)

পাইথন একটি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ভাষা। এখানে প্রায় সমস্ত কোড ক্লাস (class) নামক কন্সট্রাক্ট (constract) ব্যবহার করে করা হয়। ক্লাস ব্যবহার করে একই রকম জিনিসপত্র একসাথে গুছিয়ে রাখা যায়।

পাইথনে মোটামুটি সবকিছুকে অবজেক্ট হিসেবে ধরে নেয়া হয়। একটি অবজেক্ট কিছু ডেটা (ভেরিয়েবল) এবং কিছু ফাংশনের একটি সংগ্রহ যা এই ডেটাগুলি নিয়ে কাজ করে। একটি ক্লাস সেই অবজেক্টের জন্য একটি ব্লুপ্রিন্ট।

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

আমরা একটি উদাহারন লক্ষ্য করি-

class House:
    height = 100
    width = 50

    def furnitures():
        pass

house_object_1 = House()
house_object_2 = House()

 

ক্লাস নির্ধারণ এবং ক্লাস অবজেক্ট

class কীওয়ার্ড ব্যবহার করে সহজতম উপায়ে ক্লাস তৈরি করা যায়। উদাহরণস্বরূপ, একটি সাধারণ ফাঁকা ক্লাস তৈরি করা যাক যার কোনো কার্যকারিতা নেই।

class SimpleClass: 
    pass

 

একটি অবজেক্ট একটি ক্লাসের একটি ইন্সটেন্স (instance)। আমরা একটি ক্লাসের অসংখ্য ইন্সটেন্স তৈরী করতে পারি। একটি অবজেক্টের কিছু বৈশিষ্ট্য রয়েছে, তা হল-

১। State: এটি অবজেক্টের অ্যাট্রিবিঊটগুলো দিয়ে নির্ধারিত হয়। এটি একটি অবজেক্টের বৈশিষ্ট্যও প্রতিফলন করে।

২। Behavior: এটি অবজেক্টের মেথডগুলো দিয়ে প্রকাশ করা হয়। এটি অবজেক্টের রেসপন্সকে প্রকাশ করে অন্য অবজেক্টগুলোর কাছে।

৩। Identity: এটি অবজেক্টের অনন্য (unique) নামকরণ করে এবং অন্যান্য অবজেক্টগুলোর সাথে রিলেশন গঠনে ভূমিকা রাখে।

ক্লাসকে কল করার মাধ্যমে তার অবজেক্ট তৈরী করা যায়।

class SimpleClass: 
    pass 
simple_class_object = SimpleClass()

 

simple_class_object, SimpleClass এর একটি অবজেক্ট ইন্সটেন্স। এই অবজেক্ট ইন্সটেন্সের প্রিফিক্স দিয়ে আমরা ক্লাসের যেকোনো অ্যাট্রিবিঊটকে অ্যাক্সেস করতে পারব। ক্লাস অ্যাট্রিবিঊট ডাটা হতে পারে আবার ক্লাসের মেথডও হতে পারে। যেমন-

class Car:
    name = "BMW 7 Series"
    
    def milage(self):
        milage = 7.96
        return f"The milage of {self.name} is {milage} kmpl" 
        
car = Car()
print(car.name)
print(car.milage())

Output:
BMW 7 Series
The milage of BMW 7 Series is 7.96 kmpl

 

ক্লাস কন্সট্রাক্টর (Constructor)

পাইথনে কন্সট্রাক্টর নির্ধারণ করা হয় __ init __() মেথড এর মাধ্যমে। এটি অন্যান্য ল্যাঙ্গুয়েজের মত ক্লাস কন্সট্রাক্টরের ভূমিকা পালন করে। ক্লাস অবজেক্টের স্টেট ইনিশিয়ালাইজ করার ক্ষেত্রে কন্সট্রাক্টর ব্যবহার করা হয়। ক্লাস মেথডের মত কন্সট্রাক্টরও কিছু সংখ্যক স্টেটমেন্ট ধরে রাখে এবং ক্লাস কলের সময় স্টেটমেন্টগুলো এক্সিকিউট হয়। অবজেক্ট কল করার সাথে সাথে এটি ইন্সটেন্সিয়েটেড হয়।

class Car:
    def __init__(self, name):
        self.name = name
        
    def name_of_car(self):
        return self.name
car = Car("BMW 7 Series")
print(car.name_of_car())

Output:
BMW 7 Series

 

ক্লাস এবং ইন্সটেন্স ভ্যারিয়েবলস

ইনস্ট্যান্স ভেরিয়েবল হল এমন ভেরিয়েবল, যার মান একটি কনস্ট্রাক্টর বা মেথডের ভিতরে self দিয়ে লিখা হয়, যেখানে ক্লাস ভেরিয়েবল হল সেই ভেরিয়েবল যার মান ক্লাসে লিখা হয়।

class Car:
    # class 2. variables
    category = "luxarious car"
    def __init__(self, name, color):
        #instance valiables
        self.name = name
        self.color = color
        
    # class method
    def name_of_car(self):
        return self.name
        
car = Car("BMW 7 Series", "black")
print(car.name_of_car())

Output:
BMW 7 Series

 

আমরা সাধারণ মেথড ব্যবহার করেও ইন্সটেন্স ভ্যারিয়েবল সেট করতে পারি।

class Car:
    class Car:
    # class 2. variables
    category = "luxarious car"
    def __init__(self, name, color):
        #instance valiables
        self.name = name
        self.color = color
        
    # set instance variable through a function
    def setCylinder(self, no_of_cylinder=0):
        self.no_of_cylinder = no_of_cylinder
        
    # class method
    def name_of_car(self):
        return f"{self.name}, cylinder no: {self.no_of_cylinder}"
        
car = Car("BMW 7 Series", "black")
car.setCylinder(12)
print(car.name_of_car())

Output:
BMW 7 Series, cylinder no: 12

 

সেলফ প্যারামিটার (self parameter)

ক্লাস মেথডে একটি অতিরিক্ত প্যারামিটার প্রথমে পাঠাতে হয়। যখন আমরা মেথড কল করি তখন আমরা এই প্যারামিটারের জন্য কোন মান দিই না, পাইথন এটি প্রদান করে। যদি আমাদের এমন একটি ক্লাস মেথড থাকে যা কোন আর্গুমেন্ট নেয় না, তখনও আমাদেরকে উক্ত মেথডে self প্যারামিটারটি পাস করতে হয়।

class Car:
    def __init__(self, name, color):
        self.name = name
        self.color = color
        
    # class method that does not have any argument
    #still, have to provide self
    def name_of_car(self):
        return f"{self.name}"
        
car = Car("BMW 7 Series", "black")
print(car.name_of_car())

Output:
BMW 7 Series

 

ক্লাসের স্পেশাল ফাংশন

ক্লাস ফাংশনগুলোর যেগুলো ডবল আন্ডারস্কোর __ দিয়ে শুরু হয় তাদের বিশেষ ফাংশন বলা হয় কারণ, এইসব ফাংশন গুলো ক্লাসের গুরুত্বপূর্ণ কিছু ফাংশনালিটি সম্পাদন করে থাকে।

অবজেক্ট এবং অ্যাট্রিবিউট ডিলিট

del স্টেটমেন্ট ব্যবহার করে যেকোন সময় অবজেক্টের যেকোন অ্যাট্রিবিউট ডিলিট করে ফেলা যায়।

class Car:
    def __init__(self, name, color):
        self.name = name
        self.color = color
    
    def name_of_car(self):
        return f"{self.name}"
        
car = Car("BMW 7 Series", "black")
del car
print(car.name_of_car())

Output:
Traceback (most recent call last):
  File "<string>", line 11, in <module>
NameError: name 'car' is not defined

 

 

 
উদাহরন
এসো নিজে করি

অনুশীলন

ইন্টারভিউ প্রশ্নোত্তর

গুরুত্বপূর্ন প্রশ্নসমুহ