Python Classes and Objects

در پایتون، کلاس (Class) قالب یا نقشه‌ای است برای ساخت اشیاء، و شیء (Object) یک نمونهٔ واقعی از آن کلاس است.
هر شیء می‌تواند ویژگی (Attribute) و متد (Method) داشته باشد.

🔹 ساخت یک کلاس ساده

class MyClass: x = 10 # ویژگی (Attribute) کلاس

ایجاد یک شیء

obj = MyClass() print(obj.x) # 10

اینجا obj یک شیء از کلاس MyClass است.

🔹 سازنده (__init__)

برای مقداردهی اولیهٔ اشیاء هنگام ساخت از متد ویژهٔ __init__ استفاده می‌کنیم.

class Person: def __init__(self, name, age): self.name = name # ویژگی نمونه self.age = age p1 = Person("Ali", 25) print(p1.name, p1.age) # Ali 25
  • self به شیء فعلی اشاره دارد.

  • می‌توان ویژگی‌ها را برای هر شیء متفاوت تعریف کرد.

🔹 متدها (Methods)

توابعی که درون کلاس تعریف می‌شوند و روی شیء کار می‌کنند.

class Person: def __init__(self, name): self.name = name def greet(self): print(f"سلام، من {self.name} هستم.") p1 = Person("Sara") p1.greet() # سلام، من Sara هستم.

🔹 تغییر و حذف ویژگی‌ها

p1.age = 30 # افزودن یا تغییر ویژگی print(p1.age) del p1.age # حذف ویژگی # print(p1.age) # خطا

🔹 متدهای کلاس و استاتیک

  • متد کلاس (classmethod@) به خود کلاس (cls) دسترسی دارد.

  • متد استاتیک (staticmethod@) بدون نیاز به self یا cls عمل می‌کند.

class MathUtils: @staticmethod def add(a, b): return a + b print(MathUtils.add(3, 5)) # 8

🔹 چند شیء از یک کلاس

هر بار که از کلاس نمونه می‌سازید یک شیء مستقل ایجاد می‌شود.

p1 = Person("Ali") p2 = Person("Reza") print(p1.name) # Ali print(p2.name) # Reza

🔹 کپسوله‌سازی ساده

می‌توانید با underscore دسترسی مستقیم را محدود کنید:

class BankAccount: def __init__(self, balance): self._balance = balance # نیمه‌خصوصی (قراردادی) def get_balance(self): return self._balance

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

  1. کلاسی بنویس که مشخصات یک کتاب (عنوان، نویسنده) را نگه دارد و متدی برای نمایش اطلاعات کتاب داشته باشد.

  2. کلاس Rectangle بساز که طول و عرض بگیرد و متدی برای محاسبهٔ مساحت ارائه کند.

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

✅ خلاصه

  • Class = طرح اولیهٔ ساخت شیء.

  • Object = نمونهٔ واقعی از کلاس.

  • می‌توانید ویژگی‌ها و متدهای مختلف تعریف کنید و از متدهای استاتیک یا کلاس برای رفتارهای عمومی بهره ببرید.