tgoop.com/pyHints/336
Create:
Last Update:
Last Update:
تا اینجا میدونیم که وقتی صحبت از runtime check میشه گزینه اصلی Goose Typing هست اما ی مشکلی اینجا داره اگر من از goose typing استفاده کنم باید از MutableSequence هم Inherit کنم و همهی کلاسهایی که ازین مورد میخوان استفاده کنند حتما باید
__delitem__
رو هم پیادهسازی کنند.
اگر اینترفیس شما ترکیبی از چند
abc باشه چی ؟اون موقع شاید مجبور باشید برای اینکار بیش از ۱۰ متد رو پیادهسازی کنید وقتی فقط ۵-۶ متد رو لازم داشتید.
راهکار
Static Protocol +
runtime_checkableبه کد تصویر دقت کنید؛ اول اینکه هر کلاسی از
typing.Protocol
استفاده کنه میشه
Static Protocol
و اینطوری
type checker ها میتونند بررسی کنند.(توی سورس کدهای مختلف هم نگاه کنید فقط تا همین بخش استفاده میشه و کسی سراغ runtime_checkable نمیره معمولا اما بعنوان یک برنامهنویس پایتون شما باید همه ابزارها رو بشناسید)برگردیم سراغ مثال خودمون الان که من میخوام فقط همون ۳ متد رو داشته باشه میام یک کلاس بدون پیادهسازی میسازم به اسم
SupportMutSeqو به راحتی با
isinstance میتونم بررسی کنم که کلاسهای دیگه از این Interface پیروی میکنند یا خیر بدون اینکه هیچ برنامه نویسی یا حتی خودم رو مجبور کنم که __delitem__ پیادهسازی بشه.مثال سمت چپ هم از خود داکیومنت پایتون آوردم. چون سادهتر بود ( بخصوص
Closable )BY Python Hints

Share with your friend now:
tgoop.com/pyHints/336
