উত্তরাধিকার (Inheritance)

আমাদের একটি প্রোগ্রামে একাধিক ক্লাস থাকতে পারে এবং বিভিন্ন ক্লাসের একই রকম বৈশিষ্ট্য(attributes) থাকতে পারে। এক্ষেত্রে ইনহেরিটেন্স পদ্ধতি কাজে লাগানো হয়। ব্যাপারটা উদাহরণ দিয়ে বোঝা যাক।

মনে করি আমরা human নামে একটা ক্লাস তৈরি করেছি। এখানে human এর attributes বা বৈশিষ্ট্যগুলো হল name, age, height। এখন আমরা student নামে একটা ক্লাস তৈরি করব। এখন একটা ছাত্র একই সাথে একটা মানুষও। তাই human ক্লাসের name,age ইত্যাদি বৈশিষ্ট্য student ক্লাসেও দরকার। এখন student ক্লাসে এগুলো নতুন করে তৈরি না করে আমরা human ক্লাস থেকে উত্তরাধিকার হিসেবে নিতে পারি, অর্থাৎ ইনহেরিট করতে পারি।

তো প্রথমে আমরা human এবং student নামে দুটি ক্লাস তৈরি করবো।

class human:

    def properties(self,name,age):
        self.name = name
        self.age = age

    def talk(self):
        print("Hi, I'm",self.name+". I'm",self.age,"years old.")

class student:

    def __init__(self,roll,dept):
        self.roll = roll
        self.dept = dept

এখন দেখুন, student ক্লাসে roll এবং dept আছে। অর্থাৎ একটা ছাত্রের জন্য আমরা অবজেক্ট বানিয়ে সেখানে তার রোল এবং সে কোন ডিপার্টমেন্টে পড়ে তা আমরা জমা রাখতে পারবো। কিন্তু একটা ছাত্রের তো নাম(name) এবং বয়সও(age) আছে। এর জন্য আমরা student ক্লাসে attributes তৈরি করতে পারি। কিন্তু human ক্লাসে যেহেতু এগুলো আগে থেকেই আছে তাই নতুন করে না তৈরি করে আমরা human ক্লাসটাকে student ক্লাসের মধ্যে inherit করতে পারি। সেক্ষেত্রে human হবে আমাদের base class আর student হবে child class।

ইনহেরিট করার জন্য student ক্লাস এভাবে তৈরি করলেই হবেঃ class student(human)

এখন একটি ছাত্রের জন্য "x" নামে একটা অবজেক্ট তৈরি করবো student ক্লাস দিয়ে এবং human ক্লাসের talk() মেথডটা ব্যবহার করবো। সেক্ষেত্রে পুরো কোডটা নিচের মত হবে।

class human:

    def properties(self,name,age):
        self.name = name
        self.age = age

    def talk(self):
        print("Hi, I'm",self.name+". I'm",self.age,"years old.")

class student(human):

    def __init__(self,roll,dept):
        self.roll = roll
        self.dept = dept


x = student(1503,"Math")
x.properties("Abid",20)
x.talk()

শেষের তিনটি লাইন দেখুন। আমরা student ক্লাস ব্যবহার করে অবজেক্ট তৈড়ি করেছি। কিন্ত যেহেতু আমরা student এর মধ্যে human ক্লাস inherit করেছি তাই talk() মেথডটাও ব্যবহার করতে পারছি। আপনি নিজে এটা নিয়ে আরও নাড়াচাড়া করলে বুঝতে পারবেন।

এরজন্য আউটপুট আসবেঃ

Hi, I'm Abid. I'm 20 years old.

Super Function

এটা পাইথনের বিল্ট-ইন একটা ফাংশান এবং Inheritance এর জন্য বাড়তি কিছু সুবিধা দেয়। আমরা একটি ক্লাস থেকে আরেকটি ক্লাস ইনহেরিট করলেও অবজেক্ট তৈরি করলে কিন্তু প্রতিটা একই সাথে শুরু হবে না, যদিও আমরা ইনহেরিটেড ক্লাসগুলোর সকল মেথড ব্যবহার করতে পারবো এবং তা একটা অবজেক্ট দিয়েই। যেমন আগের উদাহরণে দেখানো হয়েছে, x দিয়ে আমরা student ক্লাসের অবজেক্ট তৈরি করেছি এবং এই অবজেক্ট দিয়ে আমরা human ক্লাসের properties মেথড ব্যবহার করতে পেরেছি। কারণ student ক্লাস human ক্লাসটা ইনহেরিট করছে।

এখন super function এর ব্যবহার দেখব।

প্রথমে আমরা নিচের কোডটা দেখি। এখানে আমরা তিনটা ক্লাস তৈরি করেছি human, citizen এবং student নামে।

class human:
    def __init__(self):
        print("HUMAN")


class citizen:
    def __init__(self):
        print("CITIZEN")

class student(human,citizen):
    def __init__(self):
        print("STUDENT")


abir = student()

কোড থেকে সহজেই বোঝা যাচ্ছে যে, student ক্লাসটা human এবং citizen থেকে ইনহেরিট করছে। এক্ষেত্রে human আর citizen হল বেজ ক্লাস। এরপর abir নামে student ক্লাসের জন্য আমরা একটা অবজেক্ট তৈরি করছি। এখানে ইনহেরিটেন্সের জন্য abir একই সাথে human, citizen এবং student. কিন্তু প্রোগ্রাম রান করলে আমরা দেখবো শুধু STUDENT প্রিন্ট হয়েছে। অন্য ক্লাসগুলোর __init()__ মেথড কাজ করে নি। এক্ষেত্রে আমরা যদি একই সাথে সব ক্লাসই ইনিশিয়েট করতে চাই তাহলে super function আমাদের কাজে লাগতে পারে। সেক্ষেত্রে আমরা প্রতিটা __init()__ মেথডের পর super().__init__() লিখে সুপার ফাংশন কল করবো।

class human:
    def __init__(self):
        super().__init__()
        print("HUMAN")


class citizen:
    def __init__(self):
        super().__init__()
        print("CITIZEN")

class student(human,citizen):
    def __init__(self):
        super().__init__()
        print("STUDENT")


abir = student()

এই প্রোগ্রাম রান করলে যে আউটপুট আসবেঃ

CITIZEN
HUMAN
STUDENT

results matching ""

    No results matching ""