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: |

According to media reports, the privacy watchdog was considering “blacklisting” some online platforms that have repeatedly posted doxxing information, with sources saying most messages were shared on Telegram. It’s yet another bloodbath on Satoshi Street. As of press time, Bitcoin (BTC) and the broader cryptocurrency market have corrected another 10 percent amid a massive sell-off. Ethereum (EHT) is down a staggering 15 percent moving close to $1,000, down more than 42 percent on the weekly chart. As of Thursday, the SUCK Channel had 34,146 subscribers, with only one message dated August 28, 2020. It was an announcement stating that police had removed all posts on the channel because its content “contravenes the laws of Hong Kong.” How to create a business channel on Telegram? (Tutorial) But a Telegram statement also said: "Any requests related to political censorship or limiting human rights such as the rights to free speech or assembly are not and will not be considered."
from us


Telegram Python Hints
FROM American