tgoop.com/pyHints/320
Create:
Last Update:
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