آدرس : تهران میدان فردوسی خیابان ایرانشهر بین سمیه و طالقانی مجتمع تجاری میلاد واحد 9

پشتیبانی 24 ساعته : 02188867940 – 09927674217

برای مشاهده لیست علاقه مندی ها وارد شوید!

مشاهده محصولات فروشگاه
0

هیچ محصولی در سبد خرید نیست.

کلاس های پایه چکیده نگه دارید

دسته بندی :اخبار سایت 26 فوریه 2023 علیرضا بابامرادی 301
کلاس های پایه چکیده نگه دارید

کلاس های پایه چکیده نگه دارید

کلاس های پایه انتزاعی (ABC) تضمین می کنند که کلاس های مشتق شده اجرا می شوند در مورد مزایای کلاس های پایه انتزاعی و نحوه تعریف آنها با ماژول abc داخلی پایتون. متدهای خاص از کلاس پایه در این فصل یاد خواهید گرفت بنابراین کلاس های پایه انتزاعی برای چه چیزی خوب هستند؟ چندی پیش بحثی در مورد اینکه از کدام الگو برای پیاده سازی سلسله مراتب کلاس قابل دستیابی اصلی در پایتون استفاده کنم داشتم. به طور دقیق تر، هدف این بود برای تعریف یک سلسله مراتب کلاسی ساده برای یک باطن خدمات در اکثر موارد ما یک کلاس BaseService داشتیم که یک رابط مشترک و چندین پیاده سازی بتن را تعریف می کرد. پیاده سازی های بتن کارهای متفاوتی انجام می دهند، اما همه آنها یک رابط را ارائه می دهند (MockService، RealService و غیره). برای اینکه این رابطه صریح باشد، بتن تمام زیر کلاس BaseService را پیاده سازی می کند. برای اینکه این کد را تا حد ممکن قابل نگهداری و برنامه نویس پسند کنیم، می خواستیم مطمئن شویم که: • نمونه سازی کلاس پایه غیرممکن است. و راه برنامه نویس پسند و قابل نگهداری • فراموش کردن پیاده سازی متدهای واسط در یکی از کلاس های فرعی هر چه زودتر باعث بروز خطا می شود. حالا چرا می خواهید از ماژول abc پایتون برای حل این مشکل استفاده کنید مسئله؟ طراحی فوق در سیستم های پیچیده تر بسیار رایج است. برای اینکه یک کلاس مشتق شده تعدادی روش از کلاس پایه پیاده سازی کند، چیزی شبیه به این اصطلاح پایتون معمولا استفاده شده:def foo(self): class Base: raise NotImplementedError()raise NotImplementedError() def bar(self): class Concrete(Base): return ‘foo() called’ def foo(self): # Oh no, we forgot to override bar()… # return “bar() called”بنابراین، از این اولین تلاش برای حل مسئله چه چیزی به دست می آوریم؟

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

استثناهای NotImplementedError:>>> b = Base() # def bar(self): >>> b.foo() NotImplementedErrorعلاوه بر این، نمونه سازی و استفاده از بتن همانطور که انتظار می رود کار می کند. و اگر یک متد اجرا نشده مانند bar() را روی آن فراخوانی کنیم، این نیز یک استثنا را مطرح می کند:>>> c.foo() >>> c = Concrete() ‘foo() called’ NotImplementedErrorاین اولین پیاده سازی مناسب است، اما هنوز کامل نیست. جنبه های منفی در اینجا این است که ما هنوز می توانیم: • Base را به خوبی و بدون دریافت خطا به صورت نمونه نمایش دهید. و • Base را به خوبی و بدون دریافت خطا به صورت نمونه نمایش دهید. و 125 >>> c.bar() 4.5. چکیده کلاس های پایه وراثت را کنترل می کنند تا زمانی که متد گمشده bar() را فراخوانی نکنیم، خطا ایجاد نکنیم. با ماژول abc پایتون که در پایتون 2.6،4 اضافه شده است، می توانیم انجام دهیم بهتر است و این مسائل باقی مانده را حل کنید. در اینجا یک پیاده سازی به روز شده با استفاده از کلاس پایه Abstract تعریف شده با ماژول abc آمده است:from abc import ABCMeta, abstractmethod • ارائه زیرکلاسهای ناقص- نمونه سازی Concrete will @abstractmethod def foo(self): class Base(metaclass=ABCMeta): pass def bar(self): @abstractmethod pass def foo(self): class Concrete(Base): pass # We forget to declare bar() again…این همچنان همانطور که انتظار می رود عمل می کند و سلسله مراتب کلاس درست را ایجاد می کند:assert issubclass(Concrete, Base)

علیرضا بابامرادی

راه آسان‌تری برای ارتباط با کاربران‌مان پیدا کرده‌ایم :) عضویت در کانال

مطالب زیر را حتما بخوانید:

قوانین ارسال دیدگاه در سایت

  • چنانچه دیدگاهی توهین آمیز باشد تایید نخواهد شد.
  • چنانچه دیدگاه شما جنبه ی تبلیغاتی داشته باشد تایید نخواهد شد.
  • چنانچه از لینک سایر وبسایت ها و یا وبسایت خود در دیدگاه استفاده کرده باشید تایید نخواهد شد.
  • چنانچه در دیدگاه خود از شماره تماس، ایمیل و آیدی تلگرام استفاده کرده باشید تایید نخواهد شد.
  • چنانچه دیدگاهی بی ارتباط با موضوع آموزش مطرح شود تایید نخواهد شد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

لینک کوتاه:
0