پرسش

تفاوت بین staticmethod و classmethod در پایتون چیست؟

What is the difference between `@staticmethod` and `@classmethod` in Python?

در پایتون، دوتا دکوراتور staticmethod و classmethod داریم. تفاوت اصلی این دو چیه؟ کجاها باید از هر کدوم استفاده کنیم؟ و کاربرد دقیق هر کدوم چیه؟

پاسخ
رضا دولتی عاشق برنامه نویسی و هوش مصنوعی!
بیوگرافی رضا دولتی

در پایتون، staticmethod و classmethod دو دکوراتور هستند که برای تعریف متدهای خاص استفاده می‌شن:

staticmethod:

این دکوراتور متدی رو تعریف می‌کنه که به هیچ وجه به شی (instance) یا کلاس (class) دسترسی نداره. یعنی نمی‌تونید از self یا cls داخلش استفاده کنید. این متد عملاً مثل یک تابع معمولی در داخل کلاس هست که فقط به خاطر سازماندهی در کلاس قرار گرفته.

مثال:

class MyClass:
      @staticmethod
      def my_static_method(arg1, arg2):
          # Method logic
          return arg1 + arg2

@classmethod:

این دکوراتور متدی رو تعریف می‌کنه که اولین آرگومنتش همیشه خود کلاس هست و نه شیء (که معمولاً به نام cls شناخته می‌شه). این نوع متدها برای کار با وضعیت کلاس یا متدهای سازنده جایگزین (alternative constructors) استفاده می‌شن.

مثال:

  class MyClass:
      @classmethod
      def my_class_method(cls, arg1):
          # Method logic
          cls.class_variable = arg1

نتیجه‌گیری:

از staticmethod زمانی استفاده کنید که نیازی به دسترسی به ویژگی‌ها یا متدهای کلاس یا شیء ندارید. در مقابل، از classmethod زمانی استفاده کنید که نیاز دارید با کلاس به عنوان یک کل کار کنید، مثلاً برای ایجاد سازنده‌های جایگزین.

پاسخ: 1403/05/28
آخرین آپدیت: 1403/07/16