متدهای جادویی (Magic Methods) در پایتون چیست؟
متدهای جادویی، متدهایی هستند که نامشان با دو علامت زیرخط (underscore) در ابتدا و انتها نوشته شده، مانند __init__
یا __str__
. این متدها توسط پایتون به طور خودکار در موقعیتهای خاص اجرا میشوند و به شما امکان میدهند رفتارهای پیشفرض اشیاء را تغییر دهید یا کنترل کنید.
برای مثال، وقتی یک شیء جدید ساخته میشود، پایتون به طور خودکار متد __init__
را اجرا میکند تا مقداردهی اولیه انجام شود. وقتی شیء را با print()
چاپ میکنیم، متد __str__
صدا زده میشود تا رشتهای قابل نمایش تولید کند.
چرا متدهای جادویی مهم هستند؟
این متدها باعث میشوند اشیاء ما رفتاری شبیه به انواع دادههای پایه (مثل اعداد و رشتهها) داشته باشند و بتوانند با عملگرها، توابع و ساختارهای پایتون به شکلی طبیعی کار کنند. بدون این متدها، شیءهای ما فقط داده خواهند داشت ولی هیچ رفتاری نخواهند داشت.
مثال ساده: متد __init__ و __str__
class Person:
def __init__(self, name):
# این متد وقتی شیء ساخته میشود اجرا میشود
self.name = name
def __str__(self):
# این متد وقتی شیء را چاپ میکنیم اجرا میشود
return f"Person: {self.name}"
p = Person("Ali")
print(p) # وقتی print اجرا میشود، __str__ فراخوانی میشود
در این مثال:
__init__
مقدار اولیه برای ویژگیname
را تنظیم میکند.__str__
مشخص میکند وقتی شیءp
چاپ میشود چه متنی نمایش داده شود.
چند متد جادویی مهم دیگر:
__add__(self, other)
: مشخص میکند وقتی دو شیء با + جمع زده شوند، چه اتفاقی بیفتد.__eq__(self, other)
: مشخص میکند چطور دو شیء با == مقایسه شوند.__len__(self)
: وقتیlen(obj)
اجرا میشود، این متد فراخوانی میشود.__getitem__(self, key)
: وقتی شیء با ایندکس (مثلobj[key]
) استفاده شود، این متد اجرا میشود.
با یادگیری متدهای جادویی، میتوانید اشیاء خود را هوشمندتر و کاربردیتر کنید و رفتار دلخواه را به آنها اضافه نمایید.