ইনার ক্লাস (Inner Class) বা নেস্টেড ক্লাস (Nested Class) হলো Python-এ অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর অংশ। এটি Python OOP এর একটি শক্তিশালী বৈশিষ্ট্য।
ইনার ক্লাস কী?
ইনার ক্লাস বলতে একটি ক্লাসের ভেতরে অন্য একটি ক্লাসকে বোঝায়। এটি ক্লাসের একটি উপাদান (component) হিসেবে কাজ করে। ইনার ক্লাস সাধারণত তখন ব্যবহৃত হয়, যখন সেই ক্লাসের ব্যবহার বাইরের অন্য কোথাও করার প্রয়োজন নেই এবং তার উপস্থিতি শুধুমাত্র বাইরের ক্লাসের জন্য প্রাসঙ্গিক।
কেন ইনার ক্লাস ব্যবহার করা হয়?
ইনার ক্লাস ব্যবহার করার কিছু সাধারণ কারণ হলো:
- বাইরের ক্লাসের সাথে সংযুক্ত থাকার প্রয়োজন: ইনার ক্লাস শুধুমাত্র তার বাইরের ক্লাসের নির্দিষ্ট কিছু কাজ সম্পাদনের জন্য তৈরি করা হয়।
- কোড সংগঠিত করা: বড়ো কোড বা জটিল ক্লাসকে ছোট ছোট অংশে ভাগ করতে এবং কোডকে আরও স্পষ্ট এবং পড়তে সহজ করতে ইনার ক্লাস ব্যবহৃত হয়।
- Encapsulation (আবদ্ধকরণ): ইনার ক্লাস বাইরের ক্লাসের একটি নির্দিষ্ট অংশকে “আবদ্ধ” করে রাখে এবং বাইরের ক্লাসের বাইরে থেকে সরাসরি অ্যাক্সেস করা যায় না। এটি একটি আবদ্ধ ব্যবস্থা তৈরি করে যা আরও নিরাপদ।
উদাহরণ দিয়ে ব্যাখ্যা:
class OuterClass:
def __init__(self, name):
self.name = name
class InnerClass:
def __init__(self, age):
self.age = age
def display_age(self):
print(f"Age: {self.age}")
def display_name(self):
print(f"Name: {self.name}")
এখানে, OuterClass হল বাইরের ক্লাস এবং তার ভেতরে InnerClass নামে একটি ইনার ক্লাস তৈরি করা হয়েছে।
ব্যবহার:
# বাইরের ক্লাসের অবজেক্ট তৈরি
outer_obj = OuterClass("John")
outer_obj.display_name() # Output: Name: John
# ইনার ক্লাসের অবজেক্ট তৈরি
inner_obj = outer_obj.InnerClass(30)
inner_obj.display_age() # Output: Age: 30
কেন ইনার ক্লাস ব্যবহার করব?
- বাইরের ক্লাসের সাথে ঘনিষ্ঠ সম্পর্ক: যদি ইনার ক্লাসের ব্যবহার শুধুমাত্র বাইরের ক্লাসের ভিতরে বা তার সাথে সংশ্লিষ্ট, তবে ইনার ক্লাস ব্যবহার করা যুক্তিযুক্ত।
- লজিক্যাল গ্রুপিং: কোডকে আরও সংগঠিত রাখতে, যখন দুটি ক্লাসের সম্পর্ক খুব ঘনিষ্ঠ থাকে এবং একে অপরের সাথে কাজ করে, তখন ইনার ক্লাস ব্যবহার করা হয়।
- Encapsulation: যখন আমরা চাই, কিছু ফিচার বা ডেটা বাইরের অন্য কোন অংশে অ্যাক্সেস করা যাবে না, তখন ইনার ক্লাস ব্যবহার করে সেই প্রাইভেসি বজায় রাখা যায়।
OOP এর অংশ হিসেবে ইনার ক্লাসের ভূমিকা:
ইনার ক্লাস OOP-এর কয়েকটি মূল বৈশিষ্ট্যের সাথে কাজ করে:
- Encapsulation: এটি বাইরের ক্লাসের অংশ হিসেবে প্রাইভেসি প্রদান করে।
- Abstraction: বাইরের ক্লাস থেকে কিছু কাজ বা ফিচারকে আলাদা রাখতে সাহায্য করে।
OOP-এর অংশ হিসেবে ইনার ক্লাসের ব্যবহার:
যদিও ইনার ক্লাস Python OOP-এর একটি বৈশিষ্ট্য, এটি সবসময় প্রয়োজন হয় না। নির্দিষ্ট পরিস্থিতিতে এটি ব্যবহৃত হয় যেখানে বাইরের এবং ইনার ক্লাসের মধ্যে ঘনিষ্ঠ সম্পর্ক থাকে এবং ইনার ক্লাসের বাইরের ক্লাস ছাড়া অন্য কোথাও ব্যবহার করার প্রয়োজন নেই।
Django Model এর Meta Class
Django-এর Meta ক্লাস একটি ইনার ক্লাস বা নেস্টেড ক্লাস। এটি একটি মডেলের অতিরিক্ত তথ্য বা options সংরক্ষণ করতে ব্যবহৃত হয়, যা Django-কে বলে দেয়, কিভাবে সেই মডেলটি ডেটাবেজে আচরণ করবে।
Meta ক্লাসে আপনি মডেলের কিছু সেটিংস বা কনফিগারেশন নির্ধারণ করতে পারেন, যেমন:
- টেবিলের নাম নির্দিষ্ট করা
- ডেটা কীভাবে অর্ডার হবে তা নির্ধারণ করা
- ইউনিক ফিল্ডের কনফিগারেশন ইত্যাদি
কেন ব্যবহার করা হয়?
Meta ক্লাস মডেলের কিছু বাড়তি নিয়ম বা আচরণ সংজ্ঞায়িত করতে সাহায্য করে, যেটা মূল মডেল ক্লাসের ভেতর সরাসরি নির্দিষ্ট করার প্রয়োজন নেই। উদাহরণস্বরূপ, কোন টেবিলের নাম কেমন হবে, ডেটার ডিফল্ট অর্ডার কী হবে—এসব মডেল ক্লাসের জন্য Meta ক্লাসে উল্লেখ করা হয়।
১. ইনার ক্লাস কেমন করে কাজ করে?
প্রথমে আমরা দেখব সাধারণ Python এর একটি উদাহরণ যেখানে ইনার ক্লাস ব্যবহার করা হয়েছে। এটি বাস্তব জীবনের একটি সহজ উদাহরণ।
উদাহরণ:
ধরো, তুমি একটি “Company” ক্লাস বানাতে চাও যেখানে একেকটি কোম্পানির বিস্তারিত তথ্য থাকবে এবং সেই কোম্পানির অধীনে বেশ কিছু ডিপার্টমেন্ট (বিভাগ) থাকবে। এখানে তুমি কোম্পানির ভেতরে “Department” নামে একটি ইনার ক্লাস ব্যবহার করতে পারো।
class Company:
def __init__(self, name):
self.name = name
self.departments = []
def add_department(self, department_name):
department = self.Department(department_name)
self.departments.append(department)
# ইনার ক্লাস Department
class Department:
def __init__(self, name):
self.name = name
def show_departments(self):
for dept in self.departments:
print(f"{self.name} কোম্পানির বিভাগ: {dept.name}")
# কোম্পানি তৈরি করা
my_company = Company("TechCorp")
my_company.add_department("HR")
my_company.add_department("Finance")
my_company.add_department("IT")
# কোম্পানির সকল ডিপার্টমেন্ট দেখানো
my_company.show_departments()
আউটপুট:
TechCorp কোম্পানির বিভাগ: HR
TechCorp কোম্পানির বিভাগ: Finance
TechCorp কোম্পানির বিভাগ: IT
কেন ইনার ক্লাস ব্যবহার করা হলো?
- এখানে Department ক্লাসটি শুধু Company ক্লাসের অধীনে অর্থপূর্ণ।
- তাই আমরা এটি Company ক্লাসের ভেতরেই তৈরি করেছি।
- Department ক্লাস আলাদা ভাবে কাজ করবে না; এটি শুধু তখনই তৈরি হবে যখন কোম্পানির তথ্য থাকবে।