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