خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

روش‌های نمونه در مقابل استاتیک در مقابل کلاس در پایتون: تفاوت‌های مهم

انواع روش پایتون می تواند برای مبتدیان گیج کننده باشد. این راهنمای سریع به شما کمک می کند تا تفاوت ها و زمان استفاده از هر یک را درک کنید.

برنامه نویسی شی گرا (OOP) یکی از محبوب ترین پارادایم ها است. اما درک برخی از مفاهیم درگیر در OOP دشوار است. سه نوع روش پایتون وجود دارد و تفاوت ها و اهداف آنها اغلب ممکن است گیج کننده باشد.

برای نوشتن کد OOP پایتون خوب، باید تفاوت بین متدهای نمونه، استاتیک و کلاس را درک کنید.

3 نوع روش در پایتون

سه نوع متد در پایتون وجود دارد: متدهای نمونه، متدهای استاتیک و متدهای کلاس.

همیشه لازم نیست این تفاوت ها را برای هر اسکریپت پایتونی که می نویسید در نظر بگیرید. اما هنگامی که از OOP در پایتون برای نوشتن کدهای پیشرفته تر استفاده می کنید، تفاوت ها می توانند تأثیرات بزرگی داشته باشند.

آشنایی با الگوهای دکوراتور

قبل از بررسی تفاوت‌ها، مهم است که یک الگوی طراحی به نام الگوی دکوراتور را درک کنید.

دکوراتورها پیچیده به نظر می رسند، اما چیزی برای ترس وجود ندارد. دکوراتورها به سادگی توابع هستند. شما می توانید آنها را خودتان بنویسید یا از کتابخانه های موجود در کتابخانه ها یا کتابخانه استاندارد پایتون استفاده کنید.

مانند هر عملکردی، دکوراتورها یک وظیفه را انجام می دهند. تفاوت در اینجا این است که دکوراتورها منطق را اعمال می کنند یا رفتار عملکردهای دیگر را تغییر می دهند. آنها یک راه عالی برای استفاده مجدد از کد هستند و می توانند به تفکیک منطق به نگرانی های فردی کمک کنند.

الگوی دکوراتور روش ترجیحی پایتون برای تعریف متدهای ثابت یا کلاس است. در پایتون به این صورت است:

class DecoratorExample:
  """ Example Class """
  def __init__(self):
    """ Example Setup """
    print('Hello, World!')

@staticmethod
  def example_function():
    """ This method is decorated! """
    print('I\'m a decorated function!')

de = DecoratorExample()
de.example_function()

دکوراتورها باید بلافاصله قبل از یک اعلان عملکرد یا کلاس ارائه شوند. آنها با علامت @ شروع می شوند و بر خلاف روش های معمولی، شما مجبور نیستید پرانتز را در انتهای آن قرار دهید، مگر اینکه در حال عبور در آرگومان ها باشید.

مطلب مرتبط:   چگونه یک NodeJS API بدون استفاده از چارچوب ایجاد کنیم

این امکان وجود دارد که دکوراتورها را با هم ترکیب کنید، خودتان بنویسید، و آنها را در کلاس ها نیز به کار ببرید، اما برای این نمونه ها نیازی به انجام هیچ کدام از این کارها نخواهید داشت.

روش های نمونه در پایتون

متدهای نمونه رایج ترین نوع متدها در کلاس های پایتون هستند. اینها به این دلیل نامیده می شوند که می توانند به داده های منحصر به فرد نمونه خود دسترسی داشته باشند. اگر دو شی دارید که هر کدام از یک کلاس خودرو ایجاد شده اند، ممکن است هر کدام ویژگی های متفاوتی داشته باشند. آنها ممکن است رنگ، اندازه موتور، صندلی و غیره متفاوت داشته باشند.

متدهای نمونه باید خود را به عنوان یک پارامتر داشته باشند، اما لازم نیست هر بار این را ارسال کنید. Self یکی دیگر از اصطلاحات ویژه پایتون است. در داخل هر روش نمونه، می‌توانید از self برای دسترسی به داده‌ها یا روش‌هایی که ممکن است در کلاس شما وجود داشته باشد استفاده کنید. شما نمی‌توانید بدون بررسی خود به آنها دسترسی داشته باشید. با این حال، در بالای خود، می توانید پارامترهای دیگری را نیز وارد کنید.

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

در اینجا یک مثال است:

class DecoratorExample:
  """ Example Class """
  def __init__(self):
    """ Example Setup """
    print('Hello, World!')
    self.name = 'Decorator_Example'
 
  def example_function(self):
    """ This method is an instance method! """
    print('I\'m an instance method!')
    print('My name is ' + self.name)
 
de = DecoratorExample()
de.example_function()

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

مطلب مرتبط:   با استفاده از دستور PostgreSQL List Databases

روش های استاتیک در پایتون

متدهای ایستا متدهایی هستند که به نوعی با یک کلاس مرتبط هستند، اما نیازی به دسترسی به داده های خاص کلاس ندارند. شما مجبور نیستید از self استفاده کنید، و حتی نیازی به نمونه سازی یک نمونه ندارید، می توانید به سادگی روش خود را فراخوانی کنید:

class DecoratorExample:
  """ Example Class """
  def __init__(self):
    """ Example Setup """
    print('Hello, World!')
 
@staticmethod
  def example_function():
    """ This method is a static method! """
    print('I\'m a static method!')
 
de = DecoratorExample.example_function()

دکوراتور @staticmethod برای اینکه به پایتون بگوید این روش یک روش ثابت است استفاده شد.

روش‌های استاتیک برای توابع ابزار، که یک کار را به صورت مجزا انجام می‌دهند، عالی هستند. آنها نیازی ندارند (و نمی توانند) به داده های کلاس دسترسی داشته باشند. آنها باید کاملاً مستقل باشند و فقط با داده هایی که به عنوان آرگومان ارسال می شوند کار کنند. می توانید از یک روش ثابت برای جمع کردن دو عدد با هم استفاده کنید یا یک رشته معین را چاپ کنید.

روش های کلاس در پایتون

متدهای کلاس سومین و آخرین نوع روش OOP هستند که باید بدانید. متدهای کلاس از کلاس خود اطلاع دارند. آنها نمی توانند به داده های نمونه خاصی دسترسی داشته باشند، اما می توانند سایر روش های ثابت را فراخوانی کنند.

متدهای کلاس به خود به عنوان آرگومان نیاز ندارند، اما به پارامتری به نام cls نیاز دارند. این مخفف کلاس است و مانند خود، به طور خودکار توسط پایتون ارسال می شود.

مطلب مرتبط:   ایجاد دارایی های بازی با ابزارهای طراحی Arcade

متدهای کلاس با استفاده از دکوراتور @classmethod ایجاد می شوند.

class DecoratorExample:
  """ Example Class """
  def __init__(self):
    """ Example Setup """
    print('Hello, World!')
 
@classmethod
  def example_function(cls):
    """ This method is a class method! """
    print('I\'m a class method!')
    cls.some_other_function()
 
@staticmethod
  def some_other_function():
    print('Hello!')
  
de = DecoratorExample()
de.example_function()

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

از آنجایی که متدهای کلاس می توانند خود کلاس را دستکاری کنند، زمانی که روی پروژه های بزرگتر و پیچیده تر کار می کنید مفید هستند.

از کدام روش پایتون باید استفاده کرد؟

شاید انتخاب بین انواع روش ها در پایتون تصمیم سخت و دلهره آور به نظر برسد، اما به زودی با کمی تمرین آن را به دست خواهید آورد.

حتی اگر فقط برای سرگرمی اسکریپت های کوچک می نویسید، یادگیری یکی دیگر از ویژگی های OOP پایتون یک مهارت عالی است و می تواند به آسان تر عیب یابی کد شما و استفاده مجدد از آن در آینده کمک کند.