You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: lessons/l19.rst
+7-3Lines changed: 7 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -286,7 +286,7 @@
286
286
287
287
288
288
.. note::
289
-
در بحث کلاسهای Abstract زبان برنامهنویسی پایتون میبایست نکات زیر را در نظر داشت:
289
+
در بحث کلاسهای Abstract زبان برنامهنویسی پایتون میبایست نکات زیر را در نظر داشته باشید:
290
290
291
291
* کلاسهای Abstract میتوانند علاوه بر متدهای Abstract، شامل متدهای معمولی که پیشتر شرح داده شد نیز باشند.
292
292
@@ -301,10 +301,14 @@
301
301
* هیچ اجباری به خالی بودن بدنه (عدم پیادهسازی) متدهای Abstract در داخل کلاس Abstract نیست، این متدها در کلاس Abstract میتوانند شامل یک پیادهسازی پیشفرض باشند، که اشیا subclassها در صورت نیاز میتوانند با استفاده از تابع ``()super`` (همانطور که پیشتر شرح داده شد)، متد نظیر کلاس Abstract را نیز فراخوانی کنند.
302
302
303
303
* کلاسهای Abstract میتوانند مانند دیگر کلاسها در چند سطح از سلسله مراتب وراثت شرکت کنند (از یکدیگر ارثبری داشته باشند)، بنابراین باید توجه داشت که تنها subclassهایی که تمام متدهای Abstract مربوط به superclassهای خود را پیادهسازی کرده باشد به عنوان یک کلاس نرمال یا به اصطلاح Concrete حساب میشود و میتوان از آن نمونهسازی کرد، در غیر این صورت مفسر پایتون آن کلاس را به عنوان یک کلاس Abstract در نظر میگیرد و اجازه نمونهسازی از آن را نخواهد داد.
304
+
305
+
* از کاربرد کلاسهای Abstract میتوان به قرار دادن شرط الزام به پیادهسازی یک سری متد مشخص اشاره کرد. به این صورت که برنامهنویس با تعریف یک کلاس Abstract، میگوید که اشیا مورد نیاز میبایست چه کاری انجام بدهند ولی نمیگوید چگونه، چرا که هر شی میتواند نسبت به نوع یا کلاس خود، یک پیادهسازی متفاوت از انجام یک کار مشترک را داشته باشد. از طرفی تنها این مهم است که تمامی اشیای دریافتی، یک سری متد مورد نیاز را حتما پیادهسازی کرده باشند. اکنون برنامهنویس میتواند با بررسی نوع شی، تنها به اشیایی که نوع آن کلاس Abstract را به ارث بردهاند (مثلا با استفاده از تابع ``isinstance``)، اجازه پذیرش برای کار مورد نظر خود را بدهد و از بروز خطا در برنامه جلوگیری کند. در این صورت میتوان مطمئن بود که اشیا از هر کلاسی که ایجاد شده باشند، حتما متدهای مورد نظر ما را پیادهسازی کردهاند.
304
306
305
307
306
308
نمونه کد زیر را در نظر بگیرید:
307
309
310
+
در برنامه، قرار است کلاس مربوط به دو گونه آبزیان (Aquatics) و پستانداران (Mammals) از حیوانات ایجاد گردد. حیوانات برخی رفتارهای مشترک دارند و برخی رفتارهایی که خاص گونه خودشان میباشد. حتی ممکن است پیادهسازی برخی رفتارها در هر نوع حیوان متناسب با خودش متفاوت باشد. بنابراین ما دو سطح از سلسله مراتب وراثت ایجاد کردهایم و به منظور مرتبط بودن مثال با مبحث جاری، تنها از کلاسهای Abstract برای پیادهسازی supperclassهای مربوطه بهره گرفتیم و پیادهسازی هر رفتار را به خود موجودیت نهایی واگذار کردیم تا کاملا شخصی و نسبت به مورد پیادهسازی گردند. در این مثال تعریف کلاس دو حیوان نهنگ قاتل (Killer Whale) که یک پستاندار دریایی است و خصوصیاتی مشترک از هر دو گروه آبزی و پستاندار را دارد (وراثت چندگانه) و شیر (Lion) که تنها جزو گروه پستانداران میباشد آورده شده است.
0 commit comments