Python for AI/Object-Oriented Programming/Lesson 23
Methods ও Attributes
Instance বনাম class attribute, @property দিয়ে হিসাব করা attribute, @classmethod দিয়ে বিকল্প constructor, আর @staticmethod — কোনটা কখন।
- সময়
- 22 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
আগের lesson-এ প্রতিটা object-এর নিজের data দেখেছি। আজ চার ধরনের জিনিস:
| কী | কোথায় থাকে | উদাহরণ |
|---|---|---|
| Instance attribute | প্রতিটা object-এ আলাদা | self.name |
| Class attribute | Class-এ, সব object শেয়ার করে | count = 0 |
@property | দেখতে attribute, আসলে হিসাব | rect.area |
@classmethod / @staticmethod | Object ছাড়াই ডাকা যায় | Temp.from_fahrenheit(98) |
কেন দরকার?
- Class attribute — সব object-এর জন্য একই মান: default setting, constant, counter।
- Property — data সবসময় সঠিক রাখা।
areaআলাদা করে রাখলে width বদলানোর পর ভুল থেকে যেতে পারে; property প্রতিবার নতুন করে হিসাব করে। - Classmethod — একই জিনিস বানানোর বিকল্প উপায়। Hugging Face-এর বিখ্যাত
AutoModel.from_pretrained("bert-base-uncased")একটা classmethod!
Instance বনাম Class attribute
university আর total class-এ থাকে — a বা b-তে খুঁজলে না পেয়ে Python class-এ খোঁজে।
সাবধান: object থেকে class attribute "বদলানো"
a.university = "DU" class-এর মান বদলায়নি — a-তে নতুন একটা instance attribute বানিয়েছে যেটা class-এরটাকে ঢেকে দিয়েছে। Class attribute বদলাতে চাইলে Student.university = ... লেখো।
আর mutable class attribute (যেমন
history = []) সাবধান — সব object একই list শেয়ার করবে। প্রতিটা object-এর আলাদা list চাইলে__init__-এself.history = []।
@property
r.area — bracket নেই, কিন্তু প্রতিবার নতুন করে হিসাব হয়। Width বদলালে area নিজেই ঠিক থাকে।
Setter আর validation
Property দিয়ে মান বসানোর সময় চেকও করা যায়:
_lr-এর শুরুতে _ — Python convention: "এটা ভেতরের জিনিস, বাইরে থেকে সরাসরি ছুঁয়ো না।"
@classmethod: বিকল্প constructor
cls হলো class নিজেই (Student)। cls(...) মানে Student(...) — নতুন object।
@staticmethod: শুধু সম্পর্কিত একটা function
Object বা class কোনোটারই data লাগে না, কিন্তু যুক্তিসঙ্গতভাবে class-এর সাথে যায়:
| প্রথম parameter | কখন | |
|---|---|---|
| সাধারণ method | self (object) | Object-এর data লাগে |
@classmethod | cls (class) | নতুন object বানানো, class-level কাজ |
@staticmethod | কিছুই না | শুধু সম্পর্কিত helper |
Exercise
Exercise
Rectangle
Rectangle class বানাও:
Rectangle(width, height)area()আরperimeter()method- একটা class attribute
count— মোট কতগুলো Rectangle বানানো হয়েছে (শুরুতে 0, প্রতিটা নতুন object-এ ১ বাড়বে)
Quiz
Challenge
Challenge
Temperature — property আর classmethod
Temperature class বানাও যেটা ভেতরে শুধু celsius রাখে:
Temperature(celsius)fahrenheitএকটা `@property` —t.fahrenheit(bracket ছাড়া) লিখলে হিসাব করে দেবেfahrenheit-এর setter —t.fahrenheit = 212লিখলেcelsiusআপডেট হবেTemperature.from_fahrenheit(f)— একটা `@classmethod` যেটা Fahrenheit থেকে নতুন object বানায়
বাস্তবে কোথায় ব্যবহার হয়?
Hugging Face Transformers-এ model load করা:
from transformers import AutoModel
model = AutoModel.from_pretrained("bert-base-uncased")
from_pretrained একটা classmethod — internet থেকে config আর weights download করে, তারপর cls(...) দিয়ে object বানায়। চলো ছোট একটা সংস্করণ বানাই:
Class attribute (REGISTRY), classmethod, **config unpacking, property — সব একসাথে।
Interview প্রশ্ন
- Beginner: Class attribute আর instance attribute-এর পার্থক্য কী?
- Intermediate:
@propertyকেন ব্যবহার করবে, সরাসরি attribute না রেখে? - Advanced:
@classmethodআর@staticmethod-এর পার্থক্য কী? Inheritance-এclsকেন গুরুত্বপূর্ণ? (Subclass থেকে ডাকলেclsহয় subclass — তাই সঠিক type-এর object তৈরি হয়।)
এরপর কী?
PyTorch-এ model লেখা শুরু হয় class MyModel(nn.Module): দিয়ে — অর্থাৎ আরেকটা class থেকে সবকিছু "উত্তরাধিকার" নিয়ে। পরের lesson: Inheritance।