🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ احسان مرادیان
کاربرد Static Method - Class Method - cls - self - init
Reza Mobaraki حل شده توسط Reza Mobaraki

با سلام و خسته نباشید .

سوالم در مورد این بود که در چه مواردی باید از Class Method‌ها و در چه مواردی باید از Static Method‌ها استفاده کرد و اینکه چطور باید فهمید که کدی که میخواهیم بنویسیم در چه مواردی از متد __init__ و در چه مواردی از cls باید استفاده کنه.

ممنون 

درود وقتتون بخیر
استفاده از `class method` و `static method` در کلاس‌های پایتون به انتخاب نوع دیزاین شما یا روشی که میخواید کد بزنید بستگی داره.

1. Class Method:

  - استفاده از `class method`  وقتی که نیاز به دسترسی به ویرایش کلاس یا تغییراتی در کلاس دارید. `class method` دسترسی به کلاس داره و میتونه متغیرها و ویژگی‌های کلاس را تغییر بده.
  - از `class method` میتونید برای ایجاد سازنده‌های جایگزین (alternative constructors) استفاده کنید. مثلاً میتونین یک `class method` بسازید که اطلاعات مرتبط با شیء را به عنوان ورودی بگیره و یک شیء جدید ایجاد کند.
  - وقتی که نیاز به دسترسی به ویژگی‌های کلاس (متغیرها یا ویژگی‌های دیگر) بدون نیاز به شیء خاصی دارید، `class method` مورد استفاده قرار میگیره.

2. Static Method:

  - `static method`  وقتی که نیاز به یک تابع درون کلاس دارید که مستقل از کلاس و شیء‌ها عمل کنه و به متغیرها و ویژگی‌های کلاس دسترسی نداشته باشه.
  - از `static method` برای ایجاد توابع کمکی استفاده میشه که به صورت منطقی به کلاس متعلق میشن ولی به شیء یا ویژگی‌های کلاس نیازی ندارن.
  - `static method` هیچ پارامتری به عنوان مرجع به کلاس یا شیء به خود نمی‌گیرد (بدون پارامتر `self` یا `cls`).

3. استفاده از `__init__` و `cls`:

  - `__init__` برای ایجاد شیء و مقداردهی اولیه ویژگی‌های شیء استفاده می‌شود. وقتی شما یک شیء جدید میسازید، `__init__` فراخوانی میشه و ویژگی‌های شیء مقداردهی میشن.
  - `cls` به عنوان پارامتر اول `__init__` به کار میره و به کلاس اشاره داره. این به شما امکان میده تا تغییراتی در کلاس اعمال کنین و ویژگی‌های کلاس را مقداردهی کنین.

 استفاده از `class method`، `static method`، `__init__`، و `cls` به تناسب نیازهای پروژه‌ها متغیر هستش.

مثال‌های عملی :

 استفاده از `class method`:

class MyClass:
   class_variable = 0
   def __init__(self, value):
       self.instance_variable = value
   @classmethod
   def increment_class_variable(cls):
       cls.class_variable += 1
obj1 = MyClass(10)
obj2 = MyClass(20)
MyClass.increment_class_variable()
print(obj1.class_variable)  # 1
print(obj2.class_variable)  # 1

در این مثال، ما از `class method` به نام `increment_class_variable` برای افزایش متغیر کلاسی به نام `class_variable` استفاده کردیم. این `class method` بدون نیاز به ایجاد شیء تعداد متغیر کلاسی را افزایش میده.

- استفاده از `static method`:

class MathUtils:
   @staticmethod
   def add(a, b):
       return a + b
result = MathUtils.add(10, 5)
print(result)  # 15

در این مثال، ما یک `static method` به نام `add` ایجاد کردیم که دو عدد را جمع میکنه. این تابع کمکی در کلاس `MathUtils` هستش و به شیء یا متغیرهای کلاس دسترسی نداره.

 استفاده از `__init__` و `cls`:

class Car:
   all_cars = []
   def __init__(self, make, model):
       self.make = make
       self.model = model
       Car.all_cars.append(self)
   @classmethod
   def get_total_cars(cls):
       return len(cls.all_cars)
car1 = Car("Toyota", "Camry")
car2 = Car("Honda", "Civic")
total_cars = Car.get_total_cars()
print(total_cars)  # 2

در این مثال، ما از `__init__` برای ایجاد شیء `Car` و مقداردهی ویژگی‌های شیء استفاده کردیم. همچنین از `@classmethod` به نام `get_total_cars` برای دسترسی به تعداد کل ماشین‌ها استفاده شده است و از پارامتر `cls` برای دسترسی به کلاس استفاده شده.

موفق باشید 💎

بهترین پاسخ
Reza Mobaraki ۱۶ آبان ۱۴۰۲، ۱۱:۰۹