متد های جادویی یا خاص در پایتون

به نام خداسلامامیدوارم حالتون بهتر از همیشه باشه.تا حالا با متد هایی مثل __init__ یا __name__ برخوردید؟، اگر برخوردید باهاشون درگیر شدید که بفهمید چی هستن؟توی این مطلب درباره ی متد های جادویی یا خاص(dunder or magic methods) صحبت میکنیم.متد چیه؟متد ها در کلاس ها توابعی هستن که به شئ ها تعلق دارن.عکسی ساده برای بیان متد هاالبته برای درک این جمله و تصویر باید با مفهوم شئ گرایی و کلاس ها آشنا باشید.داندر متد ها چی هستن؟dunder methods یا متد های خاص یه سری متد هایی هستن که از قبل به صورت پیشفرض داخل پایتون قرار داده شدن.سینتکس این متد ها به این صورت هستش که دوتا خط تیره(_) پشت و جلوی نام متد قرار میگیرن، به این صورت:__(name of method)__خب الان گیریم که اینجوریه، برامون چی کار میکنن؟ما با این متد ها میتونیم رفتار کلاس ها و شئ ها رو توی برنامه نویسی تغییر بدیم.با چند تا مثال بیشتر متوجه میشید.مثال هایی از متد های جادویی یا خاص:متد __init__ :این متد یکی از پرکاربرد ترین متد ها در پایتون هست که وظیفه اش اینه که میتونید با استفاده از اون شناسه ها رو مستقیما به کلاس ارسال کنیم، مثال:class book: def __init__(self,name,price): self.name = name self.price = price animal_farm = book('ANIMAL FARM',58) print(animal_farm)الان اگر شما از این قطعه کد خروجی بگیرید همیچین خروجی دریافت میکنید:<__main__.book object at 0x0000020B950B6C10>که این نشان دهنده ی اینه که این کلاس کجای سیستم ما ذخیره شده، اما ما این رو نمیخوایم، میخوایم نام و قیمت کتابی رو که معلوم کردیم رو بهمون نشون بده، حالا باید این کار رو کنیم، از متد __init__ استفاده کنیم، به این صورت:class book: def __init__(self,name,price): self.name = name self.price = price animal_farm = book('ANIMAL FARM',58) print(animal_farm.name)حالا اگر از این خروجی بگیریم همچین خروجی به ما میده:ANIMAL FARMالان اگر بخوایم قیمتش رو برامون چاپ کنه باید به جای animal_farm.name که توی خط آخره ، قرار بدیم animal_farm.priceمتوجه شدید که چیکار کردیم؟، ما یه راست آرگومان(argument) ها رو وارد کلاس کردیم.متد __str__ :str همون string هستش(همون رشته)متد __str__ در پایتون اشیاء کلاس را به عنوان یک رشته نشان می دهد.به این قطعه کد دقت کنید(البته این همونیه که اون بالا گفتم):class book: def __init__(self,name,price): self.name = name self.price = price animal_farm = book('ANIMAL FARM',58) print(animal_farm)الان هم خروجی به صورت زیر هست:<__main__.book object at 0x0000020B950B6E80>ولی الان دوباره میخوایم رفتار کلاس رو تغییر بدیم، به این صورت:class book: def __init__(self,name,price): self.name = name self.price = price def __str__(self): return self.name animal_farm = book('ANIMAL FARM',58) print(animal_farm)الان با اضافه کردن متد __str__ خروجیمون به این صورت میشه:ANIMAL FARMتحلیل کد ها:اول با متد __init__ ارگومان ها رو به کلاس ارسال کردیم، بعد توی متد __str__ معلوم کردیم که هروقت فقط خود متغیر رو صدا زدیم تو نامش رو چاپ کن.متد __repr__ :repr مخفف کلمه ی representation به معنی نمایش هستاین متد برامون چی کار میکنه؟وقتی مثلا میخوایم یه رشته ای رو پرینت کنیم ولی میخوایم که به صورت دلخواه خودمون چاپ شه این متد به کارمون میاد(البته با متد __str__ هم میشه انجامش داد)مثال:class book: def __init__(self,name,price): self.name = name self.price = priceحالا اگر میخواید کاری کنید که مثلا قیمت و نام کتاب رو با شکل مورد نظر چاپ کنه باید متد __repr__ رو بهش اضافه کنید:class book: def __init__(self,name,price): self.name = name self.price = price def __repr__(self): return 'the name of book is: {} and price of book is: {}'.format(self.name, self.price) B = book('wide in the willows', 68) print(B)خروجی کد بالا به صورت زیر خواهد بود:the name of book is: wide in the willows and price of book is: 68برنامه اومد و دید که ما معمولی پرینت گرفتیم و از متد __repr__ استفاده کرد تا بیاد به صورت دلخواهی که معلوم کرده بودیم چاپ کنه.نتیجه گیری:اول گفتم که متد های خاص یا جادویی چی هستند و برای چی ما ازشون استفاده میکنیمبعد ۳ تا از پرکاربرد ترین متد های خاص در پایتون رو معرفی کردم.امیدوارم براتون مفید باشه.تا مطلب بعدی خدانگهدار