Classmethod و Staticmethod در پایتون

سلام. امشب با یک موضوعی رو به رو شدم که برام کمی گیج کننده هستش. و نیمتونم درک خوبی ازش به دست بیارم.


مبحث decorators هارو به خوبی تونستم درک کنم. ولی در عکس چیزی به اسم
@classmethod
@staticmethod
داریم. ممنون اگه در این موضوع کمکی کنید . سپاس

خب اینا همونطور که از قیافشون پیداست، دکوریتور هستن.
ولی اینجا یه کم قضیه فرق میکنه. این دکوریتورها رو خود پایتون برای کلاس‌هایی که درست میکنیم میسازه.

سیستمش اینطوری هست که ما یه کلاس درست میکنیم و داخلش یه سری متغیر (با def __init__()) و تابع میسازیم.
و میتونیم با استفاده از این کلاس، آبجکت بسازیم و به اون متغیرها و توابع دسترسی داشته باشیم.
این یه توضیح مختصر از داستان OOP در پایتون بود.

حالا اگه ما بخوایم داخل کلاسمون تابعی داشته باشیم که این تابع به محتوای اون کلاس دسترسی داشته باشه (مثلا دسترسی به توابع دیگه یا متغیرها) برای اون تابع دکوریتور @classmethod یا @staticmethod رو اعمال میکنیم.
این دوتا دکوریتور خیلی شبیه هستن و تنها تفاوتشون اینه که @classmethod نیاز داره که تابعش به عنوان اولین آرگومان، خود کلاس رو بگیره. (توی عکس شما با نام cls استفاده شده)

این عکس شما مثال خوب و کاملی نزده. برای همین مشخص نیست اون clsها چی هستن. فکر میکنم این لینک بهتون کمک کنه. هم توضیح داده و هم چندتا مورد استفاده‌ی واقعی‌تر نشون داده:

1 Like