آموزش شی گرایی در برنامه نویسی پایتون 3

3 سال پیش
آموزش شی گرایی در برنامه نویسی پایتون 3
امتیاز دهید post

آموزش شی گرایی در برنامه نویسی پایتون 3

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش شی گرایی در برنامه نویسی پایتون 3 خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش صفر تا صد پایتون

پایتون از زمانی که وجود داشته است یک زبان شی گرا بوده است. به همین دلیل، ایجاد و استفاده از کلاس ها و اشیاء کاملاً آسان است. این فصل به شما کمک می کند تا در استفاده از پشتیبانی برنامه نویسی شی گرا پایتون متخصص شوید.

اگر تجربه قبلی در مورد برنامه نویسی شی گرا (OO) ندارید، ممکن است بخواهید در یک دوره مقدماتی در مورد آن یا حداقل یک نوع آموزشی مشورت کنید تا مفاهیم اولیه را درک کنید.

با این حال، در اینجا یک معرفی کوچک از برنامه نویسی شی گرا (OOP) برای کمک به شما وجود دارد.

مروری بر اصطلاحات برنامه نویسی شی گرا (OOP)

  • کلاس – یک نمونه اولیه تعریف شده توسط کاربر برای یک شی که مجموعه ای از ویژگی ها را تعریف می کند که هر شی از کلاس را مشخص می کند. ویژگی ها اعضای داده (متغیرهای کلاس و متغیرهای نمونه) و متدها هستند که از طریق علامت نقطه به آنها دسترسی پیدا می کنند.
  • متغیر کلاس – متغیری که توسط تمام نمونه های یک کلاس مشترک است. متغیرهای کلاس در داخل یک کلاس تعریف می شوند اما خارج از هر یک از متدهای کلاس تعریف می شوند. از متغیرهای کلاس به اندازه متغیرهای نمونه استفاده نمی شود.
  • عضو داده – یک متغیر کلاس یا متغیر نمونه ای که داده های مرتبط با یک کلاس و اشیاء آن را نگه می دارد.
  • اضافه بار تابع – اختصاص بیش از یک رفتار به یک تابع خاص. عملیات انجام شده بر اساس انواع اشیاء یا آرگومان های درگیر متفاوت است.
  • متغیر نمونه – متغیری که در یک متد تعریف شده است و فقط به نمونه فعلی یک کلاس تعلق دارد.
  • وراثت – انتقال ویژگی های یک کلاس به کلاس های دیگر که از آن مشتق شده اند.
  • مثال – یک شی منفرد از یک کلاس خاص. برای مثال، یک شیء obj که به یک کلاس Circle تعلق دارد، نمونه ای از کلاس Circle است.
  • Instantiation – ایجاد یک نمونه از یک کلاس.
  • روش – نوع خاصی از تابع که در تعریف کلاس تعریف می شود.
  • شی – یک نمونه منحصر به فرد از یک ساختار داده که توسط کلاس آن تعریف می شود. یک شی شامل اعضای داده (متغیرهای کلاس و متغیرهای نمونه) و متدها است.
  • بارگذاری بیش از حد اپراتور – انتساب بیش از یک تابع به یک اپراتور خاص.

ایجاد کلاس ها

دستور class یک تعریف کلاس جدید ایجاد می کند. نام کلاس بلافاصله پس از کلمه کلیدی class و سپس یک دونقطه به صورت زیر می آید

 

کلاس دارای یک رشته مستندات است که از طریق ClassName.__doc__ قابل دسترسی است.

class_suite شامل تمام دستورات مؤلفه ای است که اعضای کلاس، ویژگی های داده و توابع را تعریف می کنند.

 

مثال

در زیر مثالی از یک کلاس ساده پایتون آمده است

 

متغیر empCount یک متغیر کلاس است که مقدار آن بین تمام نمونه های a در این کلاس به اشتراک گذاشته می شود. این را می توان به عنوان Employee.empCount از داخل کلاس یا خارج از کلاس مشاهده کرد.

متد اول ()__init__ یک متد خاص است که سازنده کلاس یا متد مقداردهی اولیه نامیده می شود که پایتون هنگام ایجاد یک نمونه جدید از این کلاس فراخوانی می کند.

شما متدهای کلاس دیگر را مانند توابع عادی اعلام می کنید با این استثنا که اولین آرگومان هر متد self است. پایتون آرگومان self را برای شما به لیست اضافه می کند. هنگام فراخوانی متدها، نیازی به اضافه کردن آن ندارید.

ایجاد اشیاء نمونه

برای ایجاد نمونه‌های یک کلاس، کلاس را با استفاده از نام کلاس فراخوانی می‌کنید و هر آرگومان را که متد __init__ آن می‌پذیرد، ارسال می‌کنید.

 

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

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

 

اکنون، با کنار هم قرار دادن تمام مفاهیم –

 

هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –

 

شما می توانید در هر زمانی ویژگی های کلاس ها و اشیاء را اضافه، حذف یا تغییر دهید –

 

به جای استفاده از دستورات عادی برای دسترسی به ویژگی ها، می توانید از توابع زیر استفاده کنید –

  • getattr(obj, name[, default]) – برای دسترسی به ویژگی شی.
  • hasattr(obj,name) – برای بررسی اینکه آیا یک ویژگی وجود دارد یا خیر.
  • setattr(obj,name,value) – برای تنظیم یک ویژگی. اگر ویژگی وجود نداشته باشد، آنگاه ایجاد می شود.
  • delattr(obj، نام) – برای حذف یک ویژگی.

 

ویژگی های کلاس توکار

هر کلاس پایتون ویژگی های توکار را دنبال می کند و می توان با استفاده از عملگر نقطه مانند هر ویژگی دیگر به آنها دسترسی پیدا کرد.

  • __dict__ – دیکشنری حاوی فضای نام کلاس.
  • __doc__ – رشته مستندات کلاس یا هیچ، اگر تعریف نشده باشد.
  • __name__ – نام کلاس.
  • __module__ – نام ماژول که کلاس در آن تعریف شده است. این ویژگی در حالت تعاملی “__main__” است.
  • __bases__ – یک تاپل احتمالاً خالی حاوی کلاس های پایه، به ترتیب وقوع آنها در لیست کلاس پایه.

برای کلاس بالا اجازه دهید سعی کنیم به همه این ویژگی ها دسترسی داشته باشیم –

 

هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –

 

تخریب اشیاء (جمع آوری زباله)

پایتون اشیاء غیر ضروری (انواع داخلی یا نمونه های کلاس) را به طور خودکار حذف می کند تا فضای حافظه را آزاد کند. فرآیندی که در آن پایتون به‌طور دوره‌ای بلوک‌هایی از حافظه را که دیگر استفاده نمی‌شوند بازیابی می‌کند، مجموعه زباله نامیده می‌شود.

جمع‌آوری زباله پایتون در حین اجرای برنامه اجرا می‌شود و زمانی فعال می‌شود که تعداد مرجع یک شیء به صفر برسد. با تغییر تعداد نام های مستعار که به آن اشاره می کنند، تعداد مرجع یک شی تغییر می کند.

تعداد ارجاعات یک شیء زمانی افزایش می یابد که نام جدیدی به آن اختصاص داده شود یا در یک ظرف (فهرست، تاپل یا فرهنگ لغت) قرار گیرد. تعداد ارجاعات شیء زمانی که با del حذف شود، مرجع آن مجدداً تخصیص داده شود یا مرجع آن از محدوده خارج شود، کاهش می یابد. هنگامی که تعداد مرجع یک شی به صفر می رسد، پایتون آن را به طور خودکار جمع آوری می کند.

 

شما معمولاً متوجه نمی شوید که زباله گرد یک نمونه یتیم را از بین می برد و فضای آن را پس می گیرد. با این حال، یک کلاس می تواند متد خاص __del__()، به نام destructor را پیاده سازی کند، که زمانی فراخوانی می شود که نمونه در شرف نابودی است. این روش ممکن است برای پاکسازی منابع غیرحافظه استفاده شده توسط یک نمونه استفاده شود.

مثال
این تخریب کننده ()__del__ نام کلاس نمونه ای را که در شرف نابودی است چاپ می کند –

 

هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –

 

 

نکته – در حالت ایده آل، شما باید کلاس های خود را در یک فایل جداگانه تعریف کنید، سپس باید آنها را با استفاده از دستور import در فایل برنامه اصلی خود وارد کنید.

در مثال بالا، با فرض اینکه تعریف یک کلاس Point در point.py موجود است و هیچ کد اجرایی دیگری در آن وجود ندارد.

 

وراثت طبقاتی

به جای شروع از ابتدا، می توانید یک کلاس را با استخراج آن از یک کلاس از قبل موجود با فهرست کردن کلاس والد در پرانتز بعد از نام کلاس جدید ایجاد کنید.

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

کلاس های مشتق شده بسیار شبیه کلاس والد خود اعلام می شوند. با این حال، لیستی از کلاس های پایه برای ارث بردن از آنها پس از نام کلاس – داده می شود

 

مثال

 

هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –

 

به روشی مشابه، می توانید یک کلاس را از چندین کلاس والد به صورت زیر درایو کنید –

 

  • شما می توانید از توابع ()issubclass یا ()isinstance برای بررسی روابط دو کلاس و نمونه استفاده کنید.
  • تابع بولی issubclass(sub, sup) True را برمی گرداند، اگر زیر کلاس زیر در واقع زیر کلاس سوپرکلاس sup باشد.
  • تابع بولی ininstance(obj, Class) True را برمی گرداند، اگر obj نمونه ای از کلاس کلاس یا نمونه ای از زیر کلاس کلاس باشد.

روش های override

شما همیشه می توانید روش های کلاس والد خود را override کنید. یکی از دلایل نادیده گرفتن متدهای والدین این است که ممکن است بخواهید عملکردهای خاص یا متفاوتی در زیر کلاس خود داشته باشید.

 

مثال

 

هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –

 

 

بارگذاری بیش از حد اپراتورها

فرض کنید یک کلاس Vector برای نمایش بردارهای دو بعدی ایجاد کرده اید. وقتی از عملگر plus برای اضافه کردن آنها استفاده می کنید چه اتفاقی می افتد؟ به احتمال زیاد پایتون سر شما فریاد خواهد زد.

با این حال، می‌توانید متد __add__ را در کلاس خود برای انجام جمع برداری تعریف کنید و سپس عملگر مثبت مطابق انتظار رفتار خواهد کرد.

مثال

 

هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –

 

پنهان کردن داده ها

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

 

مثال

 

هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –

 

پایتون از آن اعضا با تغییر نام داخلی برای گنجاندن نام کلاس محافظت می کند. شما می توانید به چنین ویژگی هایی به عنوان object._className__attrName دسترسی داشته باشید. اگر آخرین خط خود را به صورت زیر جایگزین کنید، برای شما کار می کند –

 

هنگامی که کد بالا اجرا می شود، نتیجه زیر را ایجاد می کند –

 

منبع.

 

 

لیست جلسات قبل آموزش برنامه نوبسی پایتون 3

  1. آموزش برنامه نویسی پایتون 3
  2. آموزش موارد جدید در برنامه نویسی پایتون 3
  3. آموزش مرور کلی برنامه نویسی پایتون 3
  4. آموزش راه اندازی محیط برنامه نویسی پایتون 3
  5. آموزش نحو در برنامه نویسی پایتون 3
  6. آموزش انواع متغیرها در برنامه نویسی پایتون 3
  7.  آموزش عملگرهای پایه در برنامه نویسی پایتون 3
  8.  آموزش تصمیم گیری در برنامه نویسی پایتون 3
  9.  آموزش حلقه ها در برنامه نویسی پایتون 3
  10. آموزش اعداد در برنامه نویسی پایتون 3
  11. آموزش رشته ها در برنامه نویسی پایتون 3
  12.  آموزش لیست ها در برنامه نویسی پایتون 3
  13.  آموزش تاپل ها در برنامه نویسی پایتون 3
  14. آموزش دیکشنری در برنامه نویسی پایتون 3
  15.  آموزش تاریخ و زمان در برنامه نویسی پایتون 3
  16.  آموزش توابع در برنامه نویسی پایتون 3
  17. آموزش ماژول ها در برنامه نویسی پایتون 3
  18. آموزش فایل های ورودی/خروجی در برنامه نویسی پایتون 3
  19. آموزش مدیریت استثنا در برنامه نویسی پایتون 3
امتیاز دهید post
0
برچسب ها :
نویسنده مطلب saber

دیدگاه شما

بدون دیدگاه