Python OOP

در پایتون، OOP (Object-Oriented Programming) یا برنامه‌نویسی شیء‌گرا روشی است برای ساخت برنامه‌ها بر پایهٔ اشیاء (Objects).
هر شیء ترکیبی از ویژگی‌ها (Attributes) و رفتارها (Methods) است.

🔹 مفاهیم اصلی OOP

  1. Class (کلاس): قالب یا نقشهٔ ساخت اشیاء.

  2. Object (شیء): نمونه‌ای از یک کلاس.

  3. Attributes (ویژگی‌ها): متغیرهایی که اطلاعات شیء را ذخیره می‌کنند.

  4. Methods (متدها): توابعی که رفتار شیء را تعریف می‌کنند.

  5. Inheritance (وراثت): ساخت کلاس جدید بر اساس کلاس دیگر.

  6. Encapsulation (کپسوله‌سازی): پنهان‌سازی جزئیات داخلی و کنترل دسترسی.

  7. 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)

💡 تمرین‌های پیشنهادی

  1. کلاسی برای دانشجو بساز که نام، شماره دانشجویی و نمرات را ذخیره کند و میانگین نمرات را محاسبه کند.

  2. کلاس شکل (Shape) و زیرکلاس‌های مستطیل و دایره بساز که متد area را پیاده‌سازی کنند.

  3. حساب بانکی با قابلیت واریز، برداشت و بررسی موجودی ایجاد کن که موجودی منفی اجازه ندهد.

✅ خلاصه

  • کلاس = طرح اولیه، شیء = نمونهٔ واقعی.

  • اصول مهم: وراثت، چندریختی، کپسوله‌سازی، انتزاع.

  • OOP کد را منظم، قابل نگهداری و توسعه‌پذیر می‌کند و پایهٔ بسیاری از فریم‌ورک‌ها (مثل Django، PyQt و …) است.