PYHINTS Telegram 43
Python Hints
تا داریم از functools صحبت می‌کنیم بیاید و اجازه بدید راجب total_ordering هم صحبت کنیم : کارش اینه من یک کلاس کاستوم میسازم و میخوام بین آبجکت های کلاسم مقایسه رو پشتیبانی کنم اما ازونجایی که حال ندارم همه‌ی موارد مقایسه رو بنویسم : __lt__, __le__, __gt__…
اما توی این کد یک مورد bad practice خفن هم وجود داره :

پایتون بصورت خودکار کلاس و object اش روی برای ما hashable می‌کنه
راهکارش هم خیلی ساده‌اس فقط میاد آدرس حافظه اون instance ایی که از کلاس ساختیم رو میگیره و hash میکنه و بهمون بر میگردونه

اما این موضوع تا وقتی کار می‌کنه که :
__eq__()
پیاده سازی نشده باشه اضافه کنم __eq__ برای == استفاده میشه

توی کد بالا وقتی من اومدم و __eq__ رو پیاده سازی کردم باید __hash__ رو هم پیاده سازی کنم بعنوان مثال :

def __hash__(self):
return hash((self.name, self.grade))

حالا اگر به عمد نخواستیم instance هامون hashable باشه چی ؟
برای درک بهتر کد بهترین حالت این هست که از خط زیر استفاده کنید داخل کلاس :
__hash__ = None

اینجوری یوزر یا هرکسی دیگه که کدهای شمارو بخونه درک میکنه که شما به عمد و بنا به دلایل طراحی instance های این کلاس رو hashable نکردید

و فکر نمی‌کنه شما فراموش کردید.

در نهایت به خط 10 هم توجه کنید؛ hardcode نکردم اسم کلاس رو بلکه از
isinstance(other, type(self))

که راجب اهمیتش توی پست‌های قبلی و صحبت راجب __repr__ گفتم.


@PyHints
👍171



tgoop.com/pyHints/43
Create:
Last Update:

اما توی این کد یک مورد bad practice خفن هم وجود داره :

پایتون بصورت خودکار کلاس و object اش روی برای ما hashable می‌کنه
راهکارش هم خیلی ساده‌اس فقط میاد آدرس حافظه اون instance ایی که از کلاس ساختیم رو میگیره و hash میکنه و بهمون بر میگردونه

اما این موضوع تا وقتی کار می‌کنه که :
__eq__()
پیاده سازی نشده باشه اضافه کنم __eq__ برای == استفاده میشه

توی کد بالا وقتی من اومدم و __eq__ رو پیاده سازی کردم باید __hash__ رو هم پیاده سازی کنم بعنوان مثال :

def __hash__(self):
return hash((self.name, self.grade))

حالا اگر به عمد نخواستیم instance هامون hashable باشه چی ؟
برای درک بهتر کد بهترین حالت این هست که از خط زیر استفاده کنید داخل کلاس :
__hash__ = None

اینجوری یوزر یا هرکسی دیگه که کدهای شمارو بخونه درک میکنه که شما به عمد و بنا به دلایل طراحی instance های این کلاس رو hashable نکردید

و فکر نمی‌کنه شما فراموش کردید.

در نهایت به خط 10 هم توجه کنید؛ hardcode نکردم اسم کلاس رو بلکه از

isinstance(other, type(self))

که راجب اهمیتش توی پست‌های قبلی و صحبت راجب __repr__ گفتم.


@PyHints

BY Python Hints




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

View MORE
Open in Telegram


Telegram News

Date: |

With Bitcoin down 30% in the past week, some crypto traders have taken to Telegram to “voice” their feelings. As five out of seven counts were serious, Hui sentenced Ng to six years and six months in jail. Commenting about the court's concerns about the spread of false information related to the elections, Minister Fachin noted Brazil is "facing circumstances that could put Brazil's democracy at risk." During the meeting, the information technology secretary at the TSE, Julio Valente, put forward a list of requests the court believes will disinformation. Activate up to 20 bots 6How to manage your Telegram channel?
from us


Telegram Python Hints
FROM American