tgoop.com/pythonlearnme/202
Last Update:
دوستان به موارد زیادی اشاره کردند اما گفتم یکبار هم خودم همهی آن چیزی که توی کد ریویو انجام میدم رو بگم :
۱- وقتی کلاس یا تابع تعریف میکنید که خودش یا اجزا تشکیل دهندهاش مشخص نیست حتما باید داکیومنت یا کامنت داشته باشه v0, v1, v2 , ...
بدترین اسامی هست که میشه انتخاب کرد؛ چون برنامه نویس داره فرض میکنه که همهی افرادی که کد رو میخونند بیزینس رو بخوبی میشناسند.
۲- استفاده از typing optional
در اینجا درست نیست مخصوصا که برای همهی موارد تکرار شده و به همهی موارد دیفالت None
داده شده؛ حتی اگر همین کد رو بخوایم نگه داریم این راهکارها بهتر خواهد بود :v0: str | None
v0: typing.Union[str, None]
۳- از dataclass
هیچ استفادهای نشده (frozen, ordering, slot ,
....) حتی از ویژگیهای حالت سادهترش هم استفاده نشده؛ مثل پیاده سازی methods که
یعنی repr و s
tr نیازی نبود نوشته بشه.
۴- حالا که نوشته شده repr
انتهای خروجی به
در str(self)
رو داره و این یعنی برنامه نویس سواد نوشتن repr درس
ت رو نداشته و چون توی حلقه بینهایت میوفته مجبور شده که str رو
هم پیادهسازی کنه
۵- داخل repr همه
چیز پر از ایراد هست (تمام موارد رو قبلا بررسی کردیم تو کانال) :
عدم استفاده از qualname
, هاردکد کردن اسم کلاس
عدم استفاده از r!
جهت نمایش درست تایپهای داخلی
فرمت اشتباه؛ خروجی repr رو
برای ساخت مجدد آبجکت از کلاس نمیشه استفاده کرد.
۶- خورد str کلا
سوال هست؛ نوشتاری که تمیز نیست؛ هدفش مشخص نیست و ....
من حتی به این حالت هم فکر کردم که چون تعداد متغییرها زیاد بوده برنامهنویس خواسته از یک جایی به بعد ...
نشون بده مثل کاری که numpy , ....
میکنند؛ که اگر هدف هم این بوده پیاده سازی اشتباهی انجام داده و با یک جستجوی ساده حتی میتونسته به راهکار درست برسه reprlib builtin module
تقریبا ۲۰ خط کد بود و ۳۰ خط ایراد.
BY 🧑💻PythonDev🧑💻
Share with your friend now:
tgoop.com/pythonlearnme/202