یک سوال #مصاحبه دیگه
از کانال https://t.me/pytens
Core Python
❔ این سوالات برای هر موقعیت شغلی پایتون پرسیده میشه، سوال از تجربه شخصی دوستان توی مصاحبه هست که بنظرم سوال خیلی خوب و جالبی اومد
سطح : mid-level
یک کلاس برای تولید اعداد رندم بنویس :
کلاس رو توی ۳ حالت پیاده سازی کن :
1- Sequence
2- Iterator
3-Iterable
ازونجایی که کانال جای پیاده سازی نیست، سعی کنید فقط بگید تفاوت این ۳ از نظر کد چی هست !؟
مهمترین ویژگیهایی که یک کلاس باید داشته باشه تا توی یکی ازین دستهبندی ها قرار بگیره ؟
✅ جواب:
تفاوتها :
Sequence :
توی پیاده سازی و استانداردش میگه که sequence باید ۲ تا متد رو حتما داشته باشه :
__len__, __getitem__
اگر این ۲ مورد رو پیاده سازی کنید قطعا sequence رو دارید.
Iterator:
۳ تا ویژگی اصلی داره طبق تعریف پروتکل توی پایتون
۱- فقط و فقط یکبار قابل استفاده هست ینی بعد از اینکه بار اول روش loop بزنید دیگه نمیتونید اینکار رو بکنید یا مقدار خالی بر میگردونه یا ارور و باید دوباره تعریف بشه توی توابع داخلی پایتون تابع
open()
اینطور هست.
۲- حتما باید متد __iter__ رو داشته باشه و این متد خودش رو برمیگردونه معمولا (ینی یک Iterator)
۳- متد __next__ براش تعریف میشه
Iterable :
۱- برخلاف Iterator با یکبار تعریف چندین بار میشه استفادهاش کرد بعنوان مثال تابع
range()
توی خود پایتون بریزیدش توی یک متغییر و بیش از ۱ بار روش loop بزنید هربار خروجی درست رو میگیرید
۲- شامل متد __iter__ میشه ولی خودش رو قطعا بر نمیگردونه و فقط و فقط یک iterator رو بر میگردونه
۳- متد __next__ براش پیاده سازی نمیشه چون روی خودش قرار نیست loop بزنید
بخش داکیومنت مربوط به این بحث :
Python docs