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 পায় — শুধু যা আলাদা সেটা লিখতে হয়।
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() দিয়ে ডাকতে হয়:
দুই জায়গায় super():
__init__-এ — parent-এরnameআরsalaryসেট করতেdescribe()-এ — parent-এর লেখা অংশ নিয়ে তার সাথে যোগ করতে
super().__init__() ভুলে গেলে কী হয়:
AttributeError — name কখনো সেট হয়নি, কারণ parent-এর __init__ চলেইনি।
Polymorphism: একই ডাক, আলাদা আচরণ
আলাদা class-এর object, কিন্তু একই method নাম — তাই একই code সবার সাথে কাজ করে:
Loop-টা জানে না কোনটা কোন class — শুধু জানে সবার speak() আছে। এটাই polymorphism। scikit-learn-এ যেকোনো model নিয়ে একই code চলে কারণ সবার fit() আর predict() আছে।
isinstance আর issubclass
কখন inheritance নয়?
Inheritance মানে "is-a" সম্পর্ক: Dog is an Animal। কিন্তু "has-a" হলে (Car has an Engine) — inherit কোরো না, attribute হিসেবে রাখো:
একে বলে composition। অভিজ্ঞ engineer-দের পরামর্শ: সন্দেহ হলে composition বেছে নাও — গভীর inheritance chain বোঝা আর বদলানো কঠিন।
Exercise
Exercise
Shapes আর polymorphism
একটা base class Shape দেওয়া আছে। দুটো subclass বানাও:
Circle(radius)—area()return করবেmath.pi * r²Square(side)—area()return করবেside²
দুটোই Shape থেকে inherit করবে, আর Shape-এর describe() method নিজে থেকেই পাবে।
Quiz
Challenge
Challenge
scikit-learn-এর মতো model
একটা BaseModel দেওয়া আছে যেটার fit_predict() method fit() আর predict() ডাকে। দুটো subclass বানাও:
MeanRegressor—fit(X, y)training label-এর গড়self.mean_-এ রাখে;predict(X)প্রতিটা input-এর জন্য সেই গড় দেয়MajorityClassifier—fit(X, y)সবচেয়ে বেশিবার আসা labelself.label_-এ রাখে;predict(X)প্রতিটার জন্য সেই label দেয়
দুটোর fit()-ই `self` return করবে (যাতে Model().fit(X, y).predict(X) লেখা যায়)। predict একটা list return করবে, X-এর সমান দৈর্ঘ্যের।
বাস্তবে কোথায় ব্যবহার হয়?
Challenge-এ তুমি যা বানালে, scikit-learn-এ হুবহু এই design: BaseEstimator আর mixin class থেকে প্রতিটা model inherit করে। এমনকি তোমার MajorityClassifier-এর মতো জিনিসও আছে — sklearn.dummy.DummyClassifier(strategy="most_frequent")।
আর polymorphism-এর শক্তি — একই evaluation code যেকোনো model-এর সাথে:
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।