مثال حلشده
متوسط بردار دوبعدی
صورت مسئله
دو بردار (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__ سازگار هم تعریف کن — یا همانطور غیرقابلهش نگهش دار چون جهشپذیر است.