میر سبحان
میر سبحان
خواندن ۲ دقیقه·۴ ماه پیش

مقایسه برنامه‌نویسانه بین Pydantic, attrs, validata

خب چندتا مسئله داریم. پایدانتیک معروف ترین کتابخونه ای هست که برای دیتاکلاس ها و تایپ ولیدیشن/دیتا ولیدیشن استفاده میشه. در مقابل attrs داریم که کمتر شناخته شده است. و validata که شاهکار بنده با ۵ خط کده.

پایدانتیک

هر کودوم یک سری مشکلات دارند. از جمله پایدانتیک که همه چیز رو شما باید به صورت kwarg به مدل بدید که از حالت عادی پایتون خارجه. به راحتی نمیشه ورودی های مدل رو توی اینتلیسنس IDE دید و اشکال بزرگ پایدانتیک از همینجا شروع میشه. چرا که کتابخونه خود دیتاکلاس پایتون میاد میگه شما کلاستو بده به من، من میام فیلد های شمارو میگیریم یه تابع __init__ برات طراحی میکنم و جایگذاری میکنیم اما پایدانتیک به این شیوه عمل نمیکنه و مشکلات زیادی رو همینجوری رقم میزنه. توابع بسیار زیادی اشغال میکنه توی آبجکت و همین overhead ماجرا رو میبره بالا و همچنین اشغال کردن بسیاری از فانکشن با نام های مرسوم مثل schema، json, model_dump که جدا ایراد حساب میشه، خود من توی ولیدیتا به جای اینکه بیام هزاران فانکشن درون ابجکت تعریف کنم میام خارجش تعریف میکنم منطقی تر هم هست تا بخوایم یه آبجکت صد تنی رو حمل کنیم. پایدانتیک به چندتا چیزش مینازه. ساپورت کامل از تایپ انوتیشن، ارور های گوگولی تر، و هسته تاید ولیدیشنی که با راست نوشته شده و یک سری تایپ های از پیش آماده شده.


اتترس

وبسایت

اتترس قدیمیه اما همه گیر نبوده مثل پایدانتیک که بیان توی کلی فریمورک دیگه هم استفاده بکننش، از مشکلاتش اینه که ساپورت خیلی خوبی از تایپ انوتیشن نداره، تایپ آماده به نظر نداره و ارور های کاملا غیرمنطقی داره که مشخص نمیشه مدل از کودوم قسمت دچار مشکل شده.


ولیدیتا

گیتهاب . pypi

ولیدیتا رو دارم میزنم تا نه مشکلات پایدانتیک رو داشته باشه و نه مشکلات اتترس رو با کمترین سربار ممکن برای برنامه، از کتابخانه typing_validation و دیتاکلاس های خود پایتون استفاده شده و قراره چندین مدل باشه

BaseModel, LazyModel, FastModel

مدل پایه که به طور مرسوم دیتا وارد میشه و ولیدیشن صورت میگیره، در مدل های تنبل تایپ ولیدشن به طور کل اصلا انجام نمیشه اما شما فانکشن ولیدیت میتونه برات کار کنه، در عین حال یک تایپ Lazy هم تعریف خواهد شد که وقتی در مدل پایه یک داده تایپ ولیدیشن در همون مرحله اول لازم نباشه یا اصلا داده قرار نیست توی کانستراکت اولیه بیاد و بعدا طرف قراره attach کنه با این تایپ lazy ممکنه

و مدل های فست که نوع متفاوت و غیر قابل اطمینانی از دیتا ولیدیشن رو میدن بر فرض مثال شما لیستی دارید که هزار تا عدد قراره توش باشه بررسی تمامی اینها به دلیل نوع زبانی پایتون سربار سنگینی رو روی سیستم میزاره در نتیجه برای اینکه نه سیخ بسوزه و نه کباب با فست مدل از داده های با تیراژ بالا نمونه برداری میشه و این نمونه ها بررسی میشن و نه کل موجودیت و به همین دلیل قابل اطمینان نیستند اما در جاهایی میتونه مفید باشه.

پایتون
دانشجو نرم افزار
شاید از این پست‌ها خوشتان بیاید