PYHINTS Telegram 320
Python Hints
من راجب repr, str , ... صحبت کردم. این کد رو یکی از اعضا فرستاده (درحال code review این کد رو دیده) @dataclass class CasbinRuleEntity: id: typing.Optional[int] = None ptype: typing.Optional[str] = None v0: typing.Optional[str] = None v1:…
دوستان به موارد زیادی اشاره کردند اما گفتم یکبار هم خودم همه‌ی آن چیزی که توی کد ریویو انجام میدم رو بگم :

۱- وقتی کلاس یا تابع تعریف می‌کنید که خودش یا اجزا تشکیل دهنده‌اش مشخص نیست حتما باید داکیومنت یا کامنت داشته باشه
v0, v1, v2 , ...
بدترین اسامی هست که میشه انتخاب کرد؛ چون برنامه نویس داره فرض می‌کنه که همه‌ی افرادی که کد رو میخونند بیزینس رو بخوبی می‌شناسند.

۲- استفاده از typing optional در اینجا درست نیست مخصوصا که برای همه‌ی موارد تکرار شده و به همه‌ی موارد دیفالت None داده شده؛ حتی اگر همین کد رو بخوایم نگه داریم این راهکارها بهتر خواهد بود :

v0: str | None


v0: typing.Union[str, None]

۳- از dataclass هیچ استفاده‌ای نشده (frozen, ordering, slot , ....) حتی از ویژگی‌های حالت ساده‌ترش هم استفاده نشده؛ مثل پیاده سازی __methods__ که یعنی __repr__ و __str__ نیازی نبود نوشته بشه.

۴- حالا که نوشته شده
__repr__
در انتهای خروجی به str(self) رو داره و این یعنی برنامه نویس سواد نوشتن __repr__ درست رو نداشته و چون توی حلقه بی‌نهایت میوفته مجبور شده که __str__ رو هم پیاده‌سازی کنه

۵- داخل __repr__ همه چیز پر از ایراد هست (تمام موارد رو قبلا بررسی کردیم تو کانال) :
عدم استفاده از qualname , هاردکد کردن اسم کلاس
عدم استفاده از r! جهت نمایش درست تایپ‌های داخلی
فرمت اشتباه؛ خروجی __repr__ رو برای ساخت مجدد آبجکت از کلاس نمی‌شه استفاده کرد.

۶- خورد __str__ کلا سوال هست؛ نوشتاری که تمیز نیست؛ هدفش مشخص نیست و ....

من حتی به این حالت هم فکر کردم که چون تعداد متغییرها زیاد بوده برنامه‌نویس خواسته از یک جایی به بعد ... نشون بده مثل کاری که numpy , .... می‌کنند؛ که اگر هدف هم این بوده پیاده سازی اشتباهی انجام داده و با یک جستجوی ساده حتی می‌تونسته به راهکار درست برسه
reprlib builtin module

تقریبا ۲۰ خط کد بود و ۳۰ خط ایراد.
👍105❤‍🔥6🤷‍♂6👌52🔥1



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

دوستان به موارد زیادی اشاره کردند اما گفتم یکبار هم خودم همه‌ی آن چیزی که توی کد ریویو انجام میدم رو بگم :

۱- وقتی کلاس یا تابع تعریف می‌کنید که خودش یا اجزا تشکیل دهنده‌اش مشخص نیست حتما باید داکیومنت یا کامنت داشته باشه
v0, v1, v2 , ...
بدترین اسامی هست که میشه انتخاب کرد؛ چون برنامه نویس داره فرض می‌کنه که همه‌ی افرادی که کد رو میخونند بیزینس رو بخوبی می‌شناسند.

۲- استفاده از typing optional در اینجا درست نیست مخصوصا که برای همه‌ی موارد تکرار شده و به همه‌ی موارد دیفالت None داده شده؛ حتی اگر همین کد رو بخوایم نگه داریم این راهکارها بهتر خواهد بود :

v0: str | None


v0: typing.Union[str, None]

۳- از dataclass هیچ استفاده‌ای نشده (frozen, ordering, slot , ....) حتی از ویژگی‌های حالت ساده‌ترش هم استفاده نشده؛ مثل پیاده سازی __methods__ که یعنی __repr__ و __str__ نیازی نبود نوشته بشه.

۴- حالا که نوشته شده
__repr__
در انتهای خروجی به str(self) رو داره و این یعنی برنامه نویس سواد نوشتن __repr__ درست رو نداشته و چون توی حلقه بی‌نهایت میوفته مجبور شده که __str__ رو هم پیاده‌سازی کنه

۵- داخل __repr__ همه چیز پر از ایراد هست (تمام موارد رو قبلا بررسی کردیم تو کانال) :
عدم استفاده از qualname , هاردکد کردن اسم کلاس
عدم استفاده از r! جهت نمایش درست تایپ‌های داخلی
فرمت اشتباه؛ خروجی __repr__ رو برای ساخت مجدد آبجکت از کلاس نمی‌شه استفاده کرد.

۶- خورد __str__ کلا سوال هست؛ نوشتاری که تمیز نیست؛ هدفش مشخص نیست و ....

من حتی به این حالت هم فکر کردم که چون تعداد متغییرها زیاد بوده برنامه‌نویس خواسته از یک جایی به بعد ... نشون بده مثل کاری که numpy , .... می‌کنند؛ که اگر هدف هم این بوده پیاده سازی اشتباهی انجام داده و با یک جستجوی ساده حتی می‌تونسته به راهکار درست برسه
reprlib builtin module

تقریبا ۲۰ خط کد بود و ۳۰ خط ایراد.

BY Python Hints


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

View MORE
Open in Telegram


Telegram News

Date: |

Co-founder of NFT renting protocol Rentable World emiliano.eth shared the group Tuesday morning on Twitter, calling out the "degenerate" community, or crypto obsessives that engage in high-risk trading. A few years ago, you had to use a special bot to run a poll on Telegram. Now you can easily do that yourself in two clicks. Hit the Menu icon and select “Create Poll.” Write your question and add up to 10 options. Running polls is a powerful strategy for getting feedback from your audience. If you’re considering the possibility of modifying your channel in any way, be sure to ask your subscribers’ opinions first. Deputy District Judge Peter Hui sentenced computer technician Ng Man-ho on Thursday, a month after the 27-year-old, who ran a Telegram group called SUCK Channel, was found guilty of seven charges of conspiring to incite others to commit illegal acts during the 2019 extradition bill protests and subsequent months. Unlimited number of subscribers per channel The court said the defendant had also incited people to commit public nuisance, with messages calling on them to take part in rallies and demonstrations including at Hong Kong International Airport, to block roads and to paralyse the public transportation system. Various forms of protest promoted on the messaging platform included general strikes, lunchtime protests and silent sit-ins.
from us


Telegram Python Hints
FROM American