فصل اول: کلاس‌ها و برنامه‌نویسی شیءگرای عمیق

متدهای ویژه (Dunder Methods)

سفارشی‌سازی رفتار شیء با متدهای دو خط زیرین

متدهایی که با دو خط زیرین شروع و تمام می‌شوند (مانند __init__) به آن‌ها dunder methods گفته می‌شود و رفتار داخلی شیء را در برابر عملگرها و توابع داخلی پایتون تعیین می‌کنند.

class Money:
    def __init__(self, amount):
        self.amount = amount

    def __add__(self, other):
        return Money(self.amount + other.amount)

    def __repr__(self):
        return f"Money({self.amount})"

    def __eq__(self, other):
        return self.amount == other.amount

a = Money(1000)
b = Money(500)
print(a + b)        # Money(1500)
print(a == Money(1000))   # True

با پیاده‌سازی __add__ عملگر + روی اشیای کلاس شما نیز کار می‌کند. متدهای مشابه دیگری مانند __sub__، __lt__ (کوچک‌تر بودن)، __len__ و __str__ نیز به همین شکل رفتار شیء را در برابر عملگرها و توابع داخلی مانند len() یا print() تعیین می‌کنند.

تفاوت __repr__ و __str__ این است که __repr__ برای نمایش فنی و دقیق شیء (مثلاً در دیباگر) در نظر گرفته شده، در حالی که __str__ برای نمایش خوانا به کاربر است. اگر فقط یکی را تعریف کنید، پایتون در نبود __str__ از __repr__ استفاده می‌کند.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.