آموزش پایتون - متدهای استاتیک

متد استاتیک (Static Method) در پایتون چیست؟

در پایتون، یک متد استاتیک نوعی متد است که برای فراخوانی به هیچ نمونه‌ای (instance) نیاز ندارد. این متد بسیار شبیه به متد کلاس (class method) است، با این تفاوت که متد استاتیک آرگومان اجباری مانند ارجاع به شیء − self یا ارجاع به کلاس − cls ندارد.

متدهای استاتیک برای دسترسی به فیلدهای استاتیک یک کلاس مشخص استفاده می‌شوند. آن‌ها نمی‌توانند وضعیت (state) یک کلاس را تغییر دهند زیرا به کلاس وابسته هستند، نه به نمونه.

چگونه در پایتون متد استاتیک بسازیم؟

دو راه برای ساخت متد استاتیک در پایتون وجود دارد −

  • استفاده از تابع ()staticmethod
  • استفاده از دکوراتور staticmethod@

استفاده از تابع ()staticmethod

تابع استاندارد کتابخانه پایتون با نام ()staticmethod برای ساخت متد استاتیک استفاده می‌شود. این تابع یک متد را به عنوان آرگومان دریافت کرده و آن را به یک متد استاتیک تبدیل می‌کند.

سنتکس

staticmethod(method)

مثال

در کلاس Employee زیر، متد ()showcount به یک متد استاتیک تبدیل شده است. این متد استاتیک اکنون هم می‌تواند توسط شیء آن و هم توسط ارجاع خود کلاس فراخوانی شود.

class Employee:
   empCount = 0
   def __init__(self, name, age):
      self.__name = name
      self.__age = age
      Employee.empCount += 1
   
   # creating staticmethod
   def showcount():
      print (Employee.empCount)
      return
   counter = staticmethod(showcount)

e1 = Employee("Bhavana", 24)
e2 = Employee("Rajesh", 26)
e3 = Employee("John", 27)

e1.counter()
Employee.counter()

اجرای کد بالا نتیجه زیر را چاپ خواهد کرد −

3
3

استفاده از دکوراتور staticmethod@

روش دوم برای ساخت متد استاتیک، استفاده از دکوراتور staticmethod@ در پایتون است. هنگامی که از این دکوراتور همراه با یک متد استفاده می‌کنیم، به مفسر نشان می‌دهد که متد مشخص شده، استاتیک است.

سنتکس

@staticmethod
def method_name():
   # your code

مثال

در مثال زیر، در حال ساخت یک متد استاتیک با استفاده از دکوراتور staticmethod@ هستیم.

class Student:
   stdCount = 0
   def __init__(self, name, age):
      self.__name = name
      self.__age = age
      Student.stdCount += 1
   
   # creating staticmethod
   @staticmethod
   def showcount():
      print (Student.stdCount)

e1 = Student("Bhavana", 24)
e2 = Student("Rajesh", 26)
e3 = Student("John", 27)

print("Number of Students:")
Student.showcount()

اجرای کد بالا نتیجه زیر را چاپ خواهد کرد −

Number of Students:
3

مزایای متد استاتیک

استفاده از متد استاتیک مزایای متعددی دارد، از جمله −

  • از آنجایی که متد استاتیک نمی‌تواند به ویژگی‌های کلاس دسترسی داشته باشد، می‌تواند به عنوان یک تابع کاربردی (utility) برای انجام کارهایی که بارها استفاده می‌شوند به کار رود.
  • ما می‌توانیم این متد را با استفاده از نام کلاس فراخوانی کنیم. بنابراین، وابستگی به نمونه‌ها را از بین می‌برد.
  • یک متد استاتیک همیشه قابل پیش‌بینی است، زیرا رفتار آن صرف نظر از وضعیت کلاس ثابت باقی می‌ماند.
  • می‌توانیم یک متد را به عنوان متد استاتیک تعریف کنیم تا از بازنویسی (overriding) آن جلوگیری کنیم.

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.