کتابخانه های مدرن در پایتون – قسمت سوم

کتانخانه های مدرن در پایتون
کتانخانه های مدرن در پایتون


پایتون در شکل دادن به اشیاء (Objects) بسیار قدرتمند است. هر شئ میتواند ویژگیهای منحصر به خود داشته باشد و اضافه کردن یا کم کردن از این ویژگیها بشدت قابل امکان است.
اگرچه گاهی کدهای ما مجبورند با دیتاها از قبل پیش بینی نشده‌ای مجادله کنند. برای مثال وقتی یک کاربر یک داده را ارسال میکند، ممکن است ما ندانیم که کاربر کدام فیلد رو ارائه میکند. شاید بعضی از کاربران اسم کوچک داشته باشند، اسم بزرگ هم داشته باشند و همزمان بعضی اسم میانه هم داشته باشند.
اگر ما این دیتا را خودمان پردازش نکنیم و فقط آنها را به عملیات(Function) پاس بدهیم، ما در واقع اهمیت نمیدهیم که شکل داده به چه صورت است، تا زمانی که شئ مورد نظر ویژگیهای پیش‌بینی شده را داشته باشند ما هم در امان خواهیم بود، در غیر این صورت؟!!

یک مثال خیلی روزمره وقتی با پروتوکل HTTP در سرور کار داریم.، ممکن است به در پس‌ضمینه اپلیکیشن یک شئ از نوع Request ارائه کنیم. این شئ چند ویژگی مشخص دارد، مثل Host مثل path و چندین و چند ویژگی مشخص دیگر مثل query و یا content و غیره. ولی میتواند هر ویژگی پیش‌بینی نشده دیگری هم داشته باشد. از آنجایی HTTP بسیار انعطاف‌پذیر است کاربر میتواند x-totally-custom-header و کدها ما را در معرض نامشخص بودن خود قرار بدهد.

برای تمیز کردن این دیتا پایتون دولوپرها در اکثر مواقع از dict استفاده میکنند، اما در نهایت اشیاء در پایتون با استفاده از dict درست شده اند و برای ترسیم کلید و مقدارهای مطلق مناسب است. ما احتمالا در نهای دیکشنری از مثل این خواهیم داشت:

>>> request = dict(host='www.example.org', path='/index.html')


ولی تبعات استفاده از این الگو زمانی مشخص میشود، که ما این شئ را پاس بدهیم، علی الخصوص وقتی  به یک شخص ثالث. توابع معمولا با اشیاء کار میکنند و تا هنگامی که آنها به ویژگی خاصی از یک شي وابسته نباشند پاسخگو خواهند بود.

در این مواقع استفاده از dict پاسخگو حل مشکل ما نیست چرا که، امکان دستری به مقادیر نه از طریق request[‘path’] و نه از طریق request.path ممکن خواهد بود چرا که تابع در نظر دارد ما شئ را ویژگیهای  مورد نیاز او را ارائه کنیم.

>>> request = object(host='www.example.org', path='/index.html')
Traceback (most recent call last):
File &quot&quot, line 1, in
TypeError: object() takes no parameters


مایلید بیشتر بخوانید؟
از وبلاگ من بازدید کنید:

https://wp.me/pbpBPa-6v