تفاوت بین 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 زمانی استفاده کنید که نیاز دارید با کلاس به عنوان یک کل کار کنید، مثلاً برای ایجاد سازندههای جایگزین.