এই পর্যন্ত সবকিছু ছিল প্রোসিডিউরাল — একটি স্ক্রিপ্ট উপর থেকে নিচে চলছে। অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) সম্পর্কিত ডেটা আর আচরণকে অবজেক্ট নামের একটি একক ইউনিটে একসাথে গ্রুপ করে — PHP-এর OOP-এর একই মূল ধারণা, Python-এর নিজস্ব সিনট্যাক্সে।
একটি ক্লাস একটি ব্লুপ্রিন্ট; একটি অবজেক্ট এটি থেকে তৈরি একটি প্রকৃত instance — একটি স্থাপত্য পরিকল্পনা আর তা থেকে তৈরি একটি প্রকৃত বাড়ির একই সম্পর্ক।
class Student:
def __init__(self, name, course):
self.name = name
self.course = course
def introduce(self):
return f"Hi, I'm {self.name}, studying {self.course}."
student1 = Student("Priya", "Web Development")
print(student1.introduce()) # "Hi, I'm Priya, studying Web Development."__init__ হলো Python-এর কনস্ট্রাক্টর — Student(...) কল হলে এটি স্বয়ংক্রিয়ভাবে চলে, ঠিক PHP-এর __construct()-এর মতো। self মানে "এই নির্দিষ্ট অবজেক্ট", PHP-এর $this-এর সমতুল্য — পার্থক্য হলো Python এটাকে প্রতিটি মেথডে একটি স্পষ্ট প্রথম প্যারামিটার করে, স্বয়ংক্রিয়ভাবে উপলব্ধ কিছু না রেখে।
student2 = Student("Amit", "Graphic Design")
print(student1.name) # still "Priya" — unaffected by student2
print(student2.name) # "Amit"PHP-এর -> অ্যারো থেকে আলাদা, Python প্রপার্টি আর মেথড দুটোর জন্যই একটি সাধারণ ডট ব্যবহার করে — মনে রাখার জন্য শুধু একটি অ্যাক্সেস সিনট্যাক্স আছে, অবজেক্ট বনাম বাকি সবকিছুর জন্য আলাদা আলাদা নয়:
print(student1.name) # property access
print(student1.introduce()) # method callআরও কিছু সাথে সাথেই আসছে
পরের পাঠ সরাসরি এটার উপর ভিত্তি করে তৈরি, কভার করবে inheritance (একটি ক্লাস আরেকটির উপর ভিত্তি করে তৈরি) আর polymorphism (ভিন্ন ভিন্ন ক্লাস একই মেথড কলে নিজেদের মতো করে সাড়া দেওয়া)।