تمرین کلاس ژنریک در پایتون
در واقع، در این صفحه تمرین کلاس ژنریک در پایتون را از آسان به سخت تمرین میکنید.
| نام دوره | دوره تایپهینت در پایتون |
| درسنامه | فصل دهم: کلاسهای ژنریک |
| پاسخنامه | مشاهده پاسخنامه |
یک کلاس به نام Result بنویسید که نتیجهی یک عملیات را نگه دارد. این کلاس باید:
- یا یک مقدارِ موفق داشته باشد، یا یک پیام خطا
- ژنریک باشد نسبت به نوعِ مقدارِ موفق
- متدی به نام
is_okداشته باشد که بگوید عملیات موفق بوده یا نه - متدی به نام
unwrapکه مقدار را برگرداند و اگر خطا بود، استثنا بیندازد - متدی به نام
unwrap_orکه مقدار را برگرداند و اگر خطا بود، یک پیشفرض بدهد - دو سازندهی کلاسی به نامهای
okوfail
سپس با آن یک تابع find_user بنویسید.
راهنمای حل تمرین کلاس ژنریک در پایتون
اگر در حل تمرین کلاس ژنریک در پایتون به مشکل خوردید، این چهار قدم را به ترتیب بروید.
- صورت تمرین را دوباره بخوانید و خروجی مورد انتظار را روی کاغذ بنویسید.
- کد را بدون تایپهینت بنویسید تا کار کند، بعد هینتها را اضافه کنید.
mypyرا اجرا کنید و پیام خطا را کامل بخوانید؛ معمولاً خودش راهحل را میگوید.- فقط در آخرین قدم سراغ پاسخنامه بروید.
مرجع رسمی این موضوع مستندات ماژول typing در پایتون است که همهی این ابزارها را با مثال شرح داده است.
چرا تمرین کلاس ژنریک در پایتون را جدی بگیرید
تفاوت کسی که تایپهینت را میشناسد با کسی که آن را در کد واقعی به کار میبرد، در همین تمرینها روشن میشود. خواندن درسنامه فقط آشنایی میدهد، اما وقتی خودتان کد را مینویسید و تایپچکر به شما ایراد میگیرد، مفهوم در ذهن میماند. به همین دلیل تمرین کلاس ژنریک در پایتون را در قالب چند سؤال کوتاه و مستقل طراحی کردهایم تا بتوانید هر کدام را جداگانه حل کنید و نتیجه را بلافاصله بسنجید.
برای حل این تمرینها به محیط پیچیدهای نیاز ندارید. یک فایل پایتون خالی، نسخهی ۳.۱۲ یا بالاتر، و mypy نصبشده کافی است. اگر ویرایشگر شما VS Code است، افزونهی Pylance را هم فعال کنید تا خطاها را همان لحظهی نوشتن ببینید و لازم نباشد هر بار به ترمینال برگردید.
خطاهای رایج در این تمرین
- هینت را مینویسند اما هیچوقت
mypyرا اجرا نمیکنند و تصور میکنند کد بررسی شده است. - بهجای رفع ریشهی خطا، سراغ
Anyیاtype: ignoreمیروند. - نوع خروجی تابع را جا میاندازند و تایپچکر بررسی را نیمهکاره رها میکند.
- امضای تابع را عوض میکنند اما جاهایی که آن تابع را صدا میزنند فراموش میکنند.