در پایتون، OOP (Object-Oriented Programming) یا برنامهنویسی شیءگرا روشی است برای ساخت برنامهها بر پایهٔ اشیاء (Objects).
هر شیء ترکیبی از ویژگیها (Attributes) و رفتارها (Methods) است.
🔹 مفاهیم اصلی OOP
-
Class (کلاس): قالب یا نقشهٔ ساخت اشیاء.
-
Object (شیء): نمونهای از یک کلاس.
-
Attributes (ویژگیها): متغیرهایی که اطلاعات شیء را ذخیره میکنند.
-
Methods (متدها): توابعی که رفتار شیء را تعریف میکنند.
-
Inheritance (وراثت): ساخت کلاس جدید بر اساس کلاس دیگر.
-
Encapsulation (کپسولهسازی): پنهانسازی جزئیات داخلی و کنترل دسترسی.
-
Polymorphism (چندریختی): امکان استفاده از یک رابط یکسان برای رفتارهای متفاوت.
🔹 تعریف کلاس و شیء
class Person:
def __init__(self, name, age): # متد سازنده
self.name = name
self.age = age
def greet(self): # متد نمونه
print(f"سلام! من {self.name} هستم.")
# ساخت شیء (Object)
p1 = Person("Ali", 25)
p1.greet() # خروجی: سلام! من Ali هستم.
-
__init__
متد سازنده است که هنگام ایجاد شیء اجرا میشود. -
self
به شیء فعلی اشاره دارد.
🔹 ویژگیها (Attributes)
ویژگیها میتوانند عمومی یا خصوصی باشند.
class Car:
def __init__(self, brand, year):
self.brand = brand # عمومی
self._speed = 0 # خصوصی (قراردادی: underscore)
🔹 متدهای شیء و متدهای کلاس
-
متد نمونه: روی یک شیء کار میکند و
self
میگیرد. -
متد کلاس: با
classmethod@
و پارامترcls
کار میکند. -
متد استاتیک: با
staticmethod@
، مستقل از کلاس و شیء.
class MathUtils:
@staticmethod
def add(a, b):
return a + b
print(MathUtils.add(3, 4))
🔹 وراثت (Inheritance)
class Animal:
def speak(self):
print("حیوان صدا میکند.")
class Dog(Animal): # Dog فرزند Animal
def speak(self):
print("سگ پارس میکند.")
d = Dog()
d.speak() # خروجی: سگ پارس میکند.
-
متد
speak
در کلاس فرزند override شده است.
🔹 چندریختی (Polymorphism)
animals = [Dog(), Animal()]
for a in animals:
a.speak()
خروجی متناسب با نوع شیء خواهد بود.
🔹 کپسولهسازی (Encapsulation)
برای محدود کردن دسترسی به ویژگیها:
class BankAccount:
def __init__(self, balance):
self.__balance = balance # خصوصی واقعی با دو underscore
def deposit(self, amount):
self.__balance += amount
def get_balance(self):
return self.__balance
acct = BankAccount(1000)
acct.deposit(500)
print(acct.get_balance()) # 1500
# print(acct.__balance) # خطا
🔹 ویژگیها با property
class Person:
def __init__(self, name):
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self, value):
if value:
self._name = value
p = Person("Ali")
p.name = "Sara"
print(p.name)
💡 تمرینهای پیشنهادی
-
کلاسی برای دانشجو بساز که نام، شماره دانشجویی و نمرات را ذخیره کند و میانگین نمرات را محاسبه کند.
-
کلاس شکل (Shape) و زیرکلاسهای مستطیل و دایره بساز که متد
area
را پیادهسازی کنند. -
حساب بانکی با قابلیت واریز، برداشت و بررسی موجودی ایجاد کن که موجودی منفی اجازه ندهد.
✅ خلاصه
-
کلاس = طرح اولیه، شیء = نمونهٔ واقعی.
-
اصول مهم: وراثت، چندریختی، کپسولهسازی، انتزاع.
-
OOP کد را منظم، قابل نگهداری و توسعهپذیر میکند و پایهٔ بسیاری از فریمورکها (مثل Django، PyQt و …) است.