tgoop.com/pyHints/43
Last Update:
اما توی این کد یک مورد bad practice خفن هم وجود داره :
پایتون بصورت خودکار کلاس و object اش روی برای ما hashable میکنه
راهکارش هم خیلی سادهاس فقط میاد آدرس حافظه اون instance ایی که از کلاس ساختیم رو میگیره و hash میکنه و بهمون بر میگردونه
اما این موضوع تا وقتی کار میکنه که :__eq__()
پیاده سازی نشده باشه اضافه کنم __eq__
برای ==
استفاده میشه
توی کد بالا وقتی من اومدم و __eq__
رو پیاده سازی کردم باید __hash__
رو هم پیاده سازی کنم بعنوان مثال :def __hash__(self):
حالا اگر به عمد نخواستیم instance هامون hashable باشه چی ؟
return hash((self.name, self.grade))
برای درک بهتر کد بهترین حالت این هست که از خط زیر استفاده کنید داخل کلاس :__hash__ = None
اینجوری یوزر یا هرکسی دیگه که کدهای شمارو بخونه درک میکنه که شما به عمد و بنا به دلایل طراحی instance های این کلاس رو hashable نکردید
و فکر نمیکنه شما فراموش کردید.
در نهایت به خط 10 هم توجه کنید؛ hardcode نکردم اسم کلاس رو بلکه از
isinstance(other, type(self))که راجب اهمیتش توی پستهای قبلی و صحبت راجب
__repr__
گفتم.@PyHints
BY Python Hints

Share with your friend now:
tgoop.com/pyHints/43