متدهای وهلهای، استاتیک و کلاس در پایتون — تفاوتهای مهمی که باید بدانید
اگر از علاقهمندان زبان برنامهنویسی پایتون باشید، زمانی که وارد دنیای برنامهنویسی شیءگرا (OOP) میشوید، مشاهده میکنید که متدهای پایتون غالباً باعث سردرگمی میشوند. در این نوشته سه نوع از متدهای اصلی پایتون را بررسی و مقایسه میکنیم.
3 نوع متد در پایتون
سه نوع اصلی از متدها در پایتون وجود دارند: متدهای وهلهای، متدهای استاتیک و متدهای کلاس. دانستن تفاوتهای این انواع متدها برای نوشتن اسکریپتهای مقدماتی پایتون امری ضروری محسوب نمیشوند؛ اما زمانی که وارد مراحل پیشرفته برنامهنویسی شیءگرا شوید، اطلاع از تفاوت این متدها تغییر مهمی در سطح برنامهنویسی شما ایجاد میکند.
اگر به تازگی با پایتون آشنا شدهاید یا فقط میخواهید بدون نصب برنامهی خاصی کمی با امکانات آن آشنا شوید، بهترین گزینه آن است که با پوستههای تعاملی آنلاین پایتون مانند Python Anywhere ، Python Fiddle و Repl.it کار کنید.
پیش از آغاز باید الگوهای دکوراتور را درک کنید
پیش از این که به تفاوتهای انواع متدهای پایتون بپردازیم، باید یک الگوی طراحی که الگوی دکوراتور یا صرفاً دکوراتور نامیده میشود را بشناسید.
دکوراتورها پیچیده به نظر میرسند؛ اما جای نگرانی نیست. دکوراتورها همان تابع هستند. شما میتوانید خودتان آنها را بنویسید یا از دکوراتورهای موجود در کتابخانههای مختلف که شامل کتابخانه استاندارد پایتون میشود نیز استفاده کنید.
دکوراتورها همانند هر تابع دیگری یک وظیفه خاص را به انجام میرسانند. تنها تفاوت این است که از دکوراتورها برای اعمال یک منطق خاص و یا تغییر رفتار توابع دیگر استفاده میشود. بدین ترتیب روشی عالی برای استفاده مجدد از کد ایجاد میشود و میتواند به جداسازی منطق برنامه در حوزههای منفرد کمک کند.
الگوی دکوراتور روشی است که پایتون ترجیح میدهد تا متدهای استاتیک یا کلاسی را تعریف کند. در ادامه یک الگوی دکوراتور را در پایتون نشان دادهایم:
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()
دکوراتورها بلافاصله پیش از اعلان یک تابع یا کلاس میآیند. آنها با یک نشانه @ آغاز میشوند و برخلاف متدهای معمول لازم نیست در انتهایشان پرانتز بگذارید؛ مگر این که بخواهید آرگومانها را جدا کنید.
امکان ترکیب چند دکوراتور با هم وجود دارد. همچنین میتوانید دکوراتور خاص خود را بنویسید و آنها را بر روی کلاسها نیز اعمال کنید؛ اما در نمونههایی که ارائه میکنیم، نیازی به انجام این کارها نیست.
متدهای وهلهای در پایتون
متدهای وهلهای رایجترین انواع متدها در کلاسهای پایتون هستند. دلیل نامگذاری این متدها آن است که میتوانند به دادههای منحصربهفرد هر وهله از خودشان دسترسی داشته باشند. اگر دو شی داشته باشید که هر یک از یک کلاس خودرو ایجاد شده باشند در این صورت هر کدام از آنها میتوانند مشخصات مختلفی داشته باشند. این کلاسهای خودرو میتوانند رنگ، اندازه موتور، تعداد صندلی و ... مختلفی داشته باشند.
متدهای وهلهای باید پارامتری به نام Self داشته باشند؛ اما لزومی به ارسال این پارامتر در همه موارد وجود ندارد. Self یکی از کلیدواژههای خاص پایتون است. درون هر متد وهلهای میتوان از 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()
متغیر name از طریق Self مورد دسترسی قرار گرفته است. توجه کنید که Example_function فراخوانی شده است، نیازی به ارسال Self وجود ندارد، چون پایتون این کار را برای شما انجام میدهد.
متدهای استاتیک در پایتون
متدهای استاتیک آن متدهایی هستند که به طریقی به یک کلاس مرتبط هستند؛ اما نیاز به دسترسی به هیچ یک از دادههای خاص کلاس ندارند. در این موارد نیاز به استفاده از 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 به پایتون میگوید که متد از نوع استاتیک است.
متدهای استاتیک برای تابعهای کاربردی که وظیفهای را به طور مجاز و بدون نیاز به کلاس یا تابع دیگری انجام میدهند، عالی هستند. در این موارد نیازی به دسترسی به دادههای کلاس وجود ندارد و امکان آن نیز وجود ندارد. این متدها باید کاملاً خودکفا باشند و تنها با دادههایی که در آرگومانها ارسال میشوند کار کنند. برای مثال از یک متد استاتیک برای افزودن دو عدد به هم و یا پرینت گرفتن از یک رشته میتوان استفاده کرد.
متدهای کلاس در پایتون
متدهای کلاس سومین و آخرید نوع متدی هستند که در برنامهنویسی شیگرا باید بیاموزید. متدهای کلاس به دادههای کلاس دسترسی دارند. آنها به دادههای یک وهله خاص دسترسی ندارند؛ اما میتوانند متدهای استاتیک را فراخوانی کنند.
متدهای کلاس به Self به عنوان یک آرگومان نیاز ندارند؛ اما به یک پارامتر که cls نامیده میشود، نیاز دارند. این عبارت مخفف Class است و مانند Self به طور خودکار از سوی پایتون ارسال میشود.
متدهای کلاس با استفاده از دکوراتور @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()
متدهای کلاس در میان این سه نوع متد از همه پیچیدهتر هستند؛ اما کاربردهای خاص خود را دارند. متدهای کلاس میتوانند خود کلاس را دستکاری کنند و بنابراین زمانی که مشغول کار بر روی پروژههای بزرگتر و پیچیدهتر هستید کارایی زیادی دارند.
هر نوع متد چه کاربردی دارند؟
انتخاب بین انواع متدها در پایتون کاری دشوار و گیجکننده به نظر میرسد؛ اما با کمی تمرین به راحتی موارد کاربرد هر یک را میشناسید.
حتی اگر اسکریپتهای کوچکی محض سرگرمی مینویسید، یادگیری ویژگیهای شیءگرایی پایتون کاملاً مفید است و میتواند به آسانتر شدن خطایابی کد کمک کند و استفاده مجدد از آن را در آینده آسانتر سازد.
به طور خلاصه باید اشاره کرد که:
- متدهای وهلهای رایجترین نوع متدها هستند. توانایی دسترسی به دادهها و مشخصات منحصر به هر وهله را دارند.
- متدهای استاتیک نمیتوانند به چیز دیگری در یک کلاس دسترسی داشته باشند و قطعه کدهای کاملاً خودکفایی هستند.
- متدهای کلاس میتوانند به متدهای محدود شده کلاس دسترسی داشته باشند. این متدها همچنین توانایی جزئیات خاص کلاس را دارند.
در این نوشته سعی کردیم انواع مختلف متدهایی که در زبان برنامهنویسی پایتون وجود دارند را معرفی کرده و آنها را با هم مقایسه کنیم. هر گونه دیدگاه یا پیشنهاد خود را در این خصوص در بخش نظرات با ما و دیگر خوانندگان فرادرس در میان بگذارید.
اگر این نوشته مورد توجه شما قرار گرفته است، موارد زیر نیز احتمالاً برای شما مفید خواهند بود:
- آموزش برنامه نویسی پایتون – مقدماتی
- مجموعه آموزش های پروژه محور برنامه نویسی
- گنجینه آموزش های برنامه نویسی پایتون (Python)
- مجموعه آموزشهای برنامهنویسی
- آموزش تکمیلی برنامه نویسی پایتون
==
متدهای کلاس میتوانند به متدهای محدود شده کلاس دسترسی داشته باشند. این متدها همچنین توانایی جزئیات خاص کلاس را دارند.
این قسمت رو نفهمیدم
ممنون از مقاله خوبتون
بسیار آموزنده
ممنون