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

به نام خدا

سلام

امیدوارم حالتون بهتر از همیشه باشه.

تا حالا با متد هایی مثل __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__ استفاده کرد تا بیاد به صورت دلخواهی که معلوم کرده بودیم چاپ کنه.




نتیجه گیری:

اول گفتم که متد های خاص یا جادویی چی هستند و برای چی ما ازشون استفاده میکنیم

بعد ۳ تا از پرکاربرد ترین متد های خاص در پایتون رو معرفی کردم.

امیدوارم براتون مفید باشه.


تا مطلب بعدی خدانگهدار