رفتن به محتوای اصلی
برنامه‌سازی پیشرفته با پایتون درس‌نامهٔ آزاد
مثال متوسط ۱۲ دقیقه

بردار با رفتار طبیعی

بردار دوبعدی بساز که با + جمع شود، با == مقایسهٔ مقداری شود و چاپش خوانا باشد.

صورت مسئله

بردار دوبعدی بساز که با + جمع شود، با == مقایسهٔ مقداری شود و چاپش خوانا باشد.

مثال حل‌شده

بردار دوبعدی

متوسط

صورت مسئله

دو بردار (1, 2) و (3, 4) را جمع کن، با (4, 6) مقایسه کن و هر دو را چاپ کن.

راه‌حل گام‌به‌گام

    ۴ گام باقی مانده
    class Vector:
        def __init__(self, x, y):
            self.x, self.y = x, y
        def __add__(self, other):
            return Vector(self.x + other.x, self.y + other.y)
        def __eq__(self, other):
            return (self.x, self.y) == (other.x, other.y)
        def __len__(self):
            return 2
        def __repr__(self):
            return f"Vector({self.x}, {self.y})"
    
    a, b = Vector(1, 2), Vector(3, 4)
    print(a + b)            # Vector(4, 6)
    print((a + b) == Vector(4, 6))  # True
    برداشت نادرست رایج

    اشتباه رایج

    چون __eq__ تعریف کردیم، بردارها در set هم درست کار می‌کنند.

    تصحیح

    تعریف __eq__ هش را None می‌کند و بردار غیرقابل‌هش می‌شود. اگر عضویت در set لازم است، __hash__ سازگار هم تعریف کن — یا همان‌طور غیرقابل‌هش نگهش دار چون جهش‌پذیر است.

    مطالب مرتبط

    از همین بخش و با برچسب‌های مشترک

    این مطلب را خواندید؟ آن را علامت بزنید تا پیشرفت شما روی همین دستگاه ذخیره شود.

    وضعیت پیشرفت برای بردار با رفتار طبیعی