মূল content-এ যাও

Python for AI/Object-Oriented Programming/Lesson 24

Inheritance

একটা class থেকে আরেকটা class বানানো — উত্তরাধিকার, method override, super(), polymorphism, আর কেন PyTorch-এ প্রতিটা model nn.Module থেকে inherit করে।

সময়
24 মিনিট
Exercise
1
Challenge
1
Quiz
3 প্রশ্ন

সহজ ভাষায়

Inheritance (উত্তরাধিকার) মানে একটা নতুন class বানানো আরেকটা class-এর ওপর ভিত্তি করে। নতুন class (child) পুরনো class-এর (parent) সব attribute আর method পায় — শুধু যা আলাদা সেটা লিখতে হয়।

main.py

Dog-এ eat() লিখিনি, কিন্তু Animal থেকে পেয়েছে। আর speak() নিজের মতো করে নতুন লিখেছে — একে বলে override।

            Animal
        (name, eat, speak)
          /          \
       Dog            Cat
   speak -> ঘেউ     speak -> মিউ

কেন দরকার?

PyTorch-এ প্রতিটা neural network একটা class যেটা nn.Module থেকে inherit করে:

class SentimentModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.layer = nn.Linear(300, 2)

    def forward(self, x):
        return self.layer(x)

তুমি শুধু দুটো জিনিস লেখো — layer কী কী, আর data কীভাবে যাবে (forward)। বাকি সব — parameter track করা, GPU-তে পাঠানো, save/load — nn.Module থেকে inherit করে পাও। হাজার লাইনের কাজ বিনামূল্যে।

super(): parent-এর কাজ চালানো

Child নিজের __init__ লিখলে parent-এর __init__ আর আপনা থেকে চলে না। super() দিয়ে ডাকতে হয়:

main.py

দুই জায়গায় super():

  1. __init__-এ — parent-এর name আর salary সেট করতে
  2. describe()-এ — parent-এর লেখা অংশ নিয়ে তার সাথে যোগ করতে

super().__init__() ভুলে গেলে কী হয়:

main.py

AttributeError — name কখনো সেট হয়নি, কারণ parent-এর __init__ চলেইনি।

Polymorphism: একই ডাক, আলাদা আচরণ

আলাদা class-এর object, কিন্তু একই method নাম — তাই একই code সবার সাথে কাজ করে:

main.py

Loop-টা জানে না কোনটা কোন class — শুধু জানে সবার speak() আছে। এটাই polymorphism। scikit-learn-এ যেকোনো model নিয়ে একই code চলে কারণ সবার fit() আর predict() আছে।

isinstance আর issubclass

main.py

কখন inheritance নয়?

Inheritance মানে "is-a" সম্পর্ক: Dog is an Animal। কিন্তু "has-a" হলে (Car has an Engine) — inherit কোরো না, attribute হিসেবে রাখো:

main.py

একে বলে composition। অভিজ্ঞ engineer-দের পরামর্শ: সন্দেহ হলে composition বেছে নাও — গভীর inheritance chain বোঝা আর বদলানো কঠিন।

Exercise

Exercise

Shapes আর polymorphism

+20 XP

একটা base class Shape দেওয়া আছে। দুটো subclass বানাও:

  • Circle(radius) — area() return করবে math.pi * r²
  • Square(side) — area() return করবে side²

দুটোই Shape থেকে inherit করবে, আর Shape-এর describe() method নিজে থেকেই পাবে।

solution.py

Quiz

  1. Q1class Dog(Animal): — এখানে কোনটা parent class?
  2. Q2Child class-এর __init__-এ super().__init__(name) কেন ডাকা হয়?
  3. Q3isinstance(Circle(1), Shape) — Circle যদি Shape থেকে inherit করে — মান কী?
0/3 answered

Challenge

Challenge

scikit-learn-এর মতো model

+50 XP

একটা BaseModel দেওয়া আছে যেটার fit_predict() method fit() আর predict() ডাকে। দুটো subclass বানাও:

  • MeanRegressor — fit(X, y) training label-এর গড় self.mean_-এ রাখে; predict(X) প্রতিটা input-এর জন্য সেই গড় দেয়
  • MajorityClassifier — fit(X, y) সবচেয়ে বেশিবার আসা label self.label_-এ রাখে; predict(X) প্রতিটার জন্য সেই label দেয়

দুটোর fit()-ই `self` return করবে (যাতে Model().fit(X, y).predict(X) লেখা যায়)। predict একটা list return করবে, X-এর সমান দৈর্ঘ্যের।

solution.py

বাস্তবে কোথায় ব্যবহার হয়?

Challenge-এ তুমি যা বানালে, scikit-learn-এ হুবহু এই design: BaseEstimator আর mixin class থেকে প্রতিটা model inherit করে। এমনকি তোমার MajorityClassifier-এর মতো জিনিসও আছে — sklearn.dummy.DummyClassifier(strategy="most_frequent")।

আর polymorphism-এর শক্তি — একই evaluation code যেকোনো model-এর সাথে:

main.py

accuracy() function জানে না কোন model পেয়েছে — শুধু জানে fit আর predict আছে। Real project-এ ঠিক এভাবেই ১০টা model একসাথে তুলনা করা হয়।

Interview প্রশ্ন

  • Beginner: Inheritance কী? Method override কী?
  • Intermediate: super() কেন দরকার? PyTorch-এ super().__init__() না ডাকলে কী হয়?
  • Advanced: Inheritance বনাম composition — কখন কোনটা? Multiple inheritance-এ MRO (Method Resolution Order) কী?

এরপর কী?

len(dataset), dataset[0], a + b, print(obj) — এগুলো নিজের class-এর জন্য কীভাবে কাজ করানো যায়? পরের lesson: Dunder Methods।