PYTHONLEARNME Telegram 161
🧑‍💻PythonDev🧑‍💻
Duck typing, Dynamic Protocol رو میشه با هم نشون داد؛ ی جمله معروف داره که همه بلد هستند اما خیلی ها مفهومش رو نمی‌دونند Duck typing :If it looks like a duck and quacks like a duck, it’s a duck. چیزی که این جمله سعی داره بگه اینه که؛ برای ما مهم نیست object…
Dynamic Protocol 


هم از همین مفهموم استفاده می‌کنه؛ اگر یادتون باشه قبلا راجب پروتوکل مربوط به Sequence صحبت کردیم و گفتیم که اگر یک class متدهای
__len__, __getitem__

رو داشته باشه می‌تونیم بعنوان Sequence Protocol رو رعایت می‌کنه و پایتون می‌تونه مثل Sequence باهاش رفتار کنه و برخی از فانکشنالیتی‌هایی که پیاده سازی هم نکردیم رو بهش بده.

Dynamic Protocol 

ی قدم جلوتر میره و میگه اگر قرار نیست len اون آبجکت رو بگیری پس نیازی نیست توی اون کلاس حتی __len__ رو پیاده سازی کنی و صرف وجود __getitem__ من بهت یک سری ویژگی‌های Sequence رو میدم؛ ویژگی‌هایی که فقط به __getitem__ نیاز داره و نه چیز دیگه.

توی مثال تصویر قبل؛ من هیچوقت __iter__ رو پیاده‌سازی نکردم اما می‌تونم روی dp از for loop استفاده کنم؛ به لطف
Duck typing, Dynamic Protocol
پایتون از __getitem__ استفاده می‌کنه و با شروع از اندیس 0 می‌تونه کار __iter__ رو انجام بده و for loop بهمون خروجی خواهد داد.
برای in هم موضوع همین هست؛ توی کد قبلی من هیچوقت __contain__ رو پیاده‌سازی نکردم اما
9 in dp
خروجی میده (اینبار هم پایتون از __getitem__ بعنوان fallback برای __contain__ استفاده می‌کنه)

بحثی که پیش میاد اینه که؛ آیا این موضوع اتفاق خوبی هست ؟
نه همیشه؛ خیلی وقت‌ها میشه نسخه optimize شده تری رو نوشت مثلاْ توی کد قبلی اگر من لیست رو بصورت sort قرار باشه داشته باشم همیشه می‌تونم بجای __contain__ که خود پایتون بهم میده و linear search هست که مرتبه زمانی O(n) داره از Binary Search استفاده کنم و مرتبه زمانی رو تا O(log n) کاهش بدم.
اما تا وقتی نیازی به بهبود ندارم؛ هیچوقت __contain__ یا ... رو خودم پیاده‌سازی نمی‌کنم و از آنچه که پایتون بهم ارائه میده استفاده می‌کنم (اینطوری نه نیاز به تست هست؛ نه باگ ازش در میاد و کد تمیزتری هم خواهم داشت)



tgoop.com/pythonlearnme/161
Create:
Last Update:

Dynamic Protocol 


هم از همین مفهموم استفاده می‌کنه؛ اگر یادتون باشه قبلا راجب پروتوکل مربوط به Sequence صحبت کردیم و گفتیم که اگر یک class متدهای
__len__, __getitem__

رو داشته باشه می‌تونیم بعنوان Sequence Protocol رو رعایت می‌کنه و پایتون می‌تونه مثل Sequence باهاش رفتار کنه و برخی از فانکشنالیتی‌هایی که پیاده سازی هم نکردیم رو بهش بده.

Dynamic Protocol 

ی قدم جلوتر میره و میگه اگر قرار نیست len اون آبجکت رو بگیری پس نیازی نیست توی اون کلاس حتی __len__ رو پیاده سازی کنی و صرف وجود __getitem__ من بهت یک سری ویژگی‌های Sequence رو میدم؛ ویژگی‌هایی که فقط به __getitem__ نیاز داره و نه چیز دیگه.

توی مثال تصویر قبل؛ من هیچوقت __iter__ رو پیاده‌سازی نکردم اما می‌تونم روی dp از for loop استفاده کنم؛ به لطف
Duck typing, Dynamic Protocol
پایتون از __getitem__ استفاده می‌کنه و با شروع از اندیس 0 می‌تونه کار __iter__ رو انجام بده و for loop بهمون خروجی خواهد داد.
برای in هم موضوع همین هست؛ توی کد قبلی من هیچوقت __contain__ رو پیاده‌سازی نکردم اما
9 in dp
خروجی میده (اینبار هم پایتون از __getitem__ بعنوان fallback برای __contain__ استفاده می‌کنه)

بحثی که پیش میاد اینه که؛ آیا این موضوع اتفاق خوبی هست ؟
نه همیشه؛ خیلی وقت‌ها میشه نسخه optimize شده تری رو نوشت مثلاْ توی کد قبلی اگر من لیست رو بصورت sort قرار باشه داشته باشم همیشه می‌تونم بجای __contain__ که خود پایتون بهم میده و linear search هست که مرتبه زمانی O(n) داره از Binary Search استفاده کنم و مرتبه زمانی رو تا O(log n) کاهش بدم.
اما تا وقتی نیازی به بهبود ندارم؛ هیچوقت __contain__ یا ... رو خودم پیاده‌سازی نمی‌کنم و از آنچه که پایتون بهم ارائه میده استفاده می‌کنم (اینطوری نه نیاز به تست هست؛ نه باگ ازش در میاد و کد تمیزتری هم خواهم داشت)

BY 🧑‍💻PythonDev🧑‍💻




Share with your friend now:
tgoop.com/pythonlearnme/161

View MORE
Open in Telegram


Telegram News

Date: |

How to Create a Private or Public Channel on Telegram? In 2018, Telegram’s audience reached 200 million people, with 500,000 new users joining the messenger every day. It was launched for iOS on 14 August 2013 and Android on 20 October 2013. Matt Hussey, editorial director of NEAR Protocol (and former editor-in-chief of Decrypt) responded to the news of the Telegram group with “#meIRL.” Informative How to create a business channel on Telegram? (Tutorial)
from us


Telegram 🧑‍💻PythonDev🧑‍💻
FROM American