جزئیات آموزش
مدرس: سجاد رحمانی
آخرین ویرایش: ۲۰ مرداد ۱۳۹۸
دسته بندی:

کانال تلگرام

بنر تلگرامی

شی گرایی- آموزش اشیاء و کلاس ها در پایتون (Python)

در این آموزش از صفر و ساده ترین مطالب class (کلاس) رو با مثال و تمرین در پایتون (Python) آموزش میدیم! از بررسی مفهوم در قالب یک مثال کاربردی گرفته تا دو مثالی که در ادامه می‌گیم، به هیچ وجه دچار مشکل نمی‌شید و انقدر رووون گفته شده که قطعاً متوجه می‌شید! فقط کافیست با ما پیش بیاید و پیوستگی مطلب رو رعایت کنید! همین!

تشریح اهمیت بحث و مقدمه!

شاید بتونم با تمام قوا بگم یکی از مهم‌ترین مباحث پایتون (Python) رو پیش رو داریم! مخصوصاً برای کدهای پیشرفته‌تر!

در این حد بگم، مطمئنم یه عده زیادی از کسایی که میان پایتون یاد بگیرین، دنبال بحث داده کاوی و یادگیری ماشین و .. اند! و این دوستان به وقووور از این مبحث استفاده خواهند کرد!! نمونه کد زیر رو در نظر بگیرید! [هرچند اگر قبلاً ندیده باشید، تقریباً هیچی ازش متوجه نمی‌شید! اما واقعاً الان هدف متوجه شدن نیست، هدف اینه که چشمتون آشنا بشه!]

و دوستانی که هم به هدف برنامه نویسی (برای گوشی و windows و ..) هم دارن python یاد میگیرین! انقدر از این استفاده میکنن که خدا میدونه! یعنی حتی ساده‌ترین GUI (رابط گرافیکی کاربر) ها رو هم با همین class می‌نویسن!

پیشاپیش اعلام میکنم: مبحثی که پیش رو داریم، به سادگی قبلی‌ها نیست! اگر قرار باشه توی یه دونه آموزش سَمْبَل کنیم، واقعاً به هیچ دردی نمی‌خوره، پس لطفاً صبور باشید! و مباحث این بخش رو قدم به قدم دنبال کنید! وگرنه واقعاً نمیشه تضمین کرد که مبحث رو کامل یاد بگیرید!

مفهوم کلاس (class) در پایتون (Python)

یک کارخونه خودرو سازی فرضی به اسم «کولاک» در نظر بگیرید! فرض کنید بزرگترین کارخونه خودروسازی جهان است! (از قدیم گفتن: آرزو بر جوانان عیب نیست!)

 این کارخونه‌ی خودروسازی، یه سری ماشین‌های کلاس A داره که خیلی خوف و خفن هستن! و شدیداً هم گِرونه!

این خودروهای کلاسِ A یه سری خصویت و ویژگی (property) به شرح زیر دارن!

الف) در سال ۱۳۹۸ شمسی، تأسیس شدن!

ب) مربوط به شرکت «کولاک» هستن!

پ) و مربوط به کشور «ایران» هستند!

این شرکت خودرو سازی، خط تولید این ماشین‌ها رو راه میندازه! و اولین ماشینی که از خط تولید بیرون میاد رو Car01 می‌نامیم!

درواقع این ماشین با اسم Car01 یک شیء (object) یا یک نمونه (instance) از این خودروهای کلاسِ A است!

قبول دارید، این car01 که یک نمونه یا شیء از کلاسِ A بود، دقیقاً همووون خاصیت‌های کلاسِ A رو هم داره؟! (بدیهی و و اضحه که بله قبول داریم!)

جمله قصار: پس هر خصوصیتی که کلاس داره، شیء یا نمونه اون هم خواهد داشت!

حالا فرض کنید مدیرانِ این شرکت خیلی تعصب دارن رووووی اسم «کولاک»! تا این حد که یه دکمه گذاشتن روی هر ماشین، که وقتی فشارش میدین، میگه: «کولاک»!

بذارید آخرین سوال رو هم بپرسم و بعد بریم سراغ کدنویسی!: قبول دارید هر نمونه یا شیء از کلاسِ A از این دکمه‌ها داره؟! [بله دیگه! همین الان گفتیم! که روی هر ماشین همچین دکمه‌ای هست!]

کدنویسی یک کلاس (Class) ساده در پایتون (Python)

از اونجایی که حدس میزنم، یه عده میگن: “خب توی بخش مفهوم کلاس که داره داستان میگه واسه خودش!” و احتمال خیلی زیاد نمی‌خونن! هشدار میدم، که لزوم فهم از اینجا به بعد خوندن همون بخش قبلی است!

حالا قطعه کد زیر رو در نظر بگیرید، تا در ادامش توضیح بدم!

در خط ۱، کلاسی به اسم A داریم تعریف می‌کنیم! که شامل مواردی است که در ادامه میگیم!

و مشاهده می‌کنید که برای اینکه بگیم خطوط ۲ تا ۷ زیرمجموعه خط یک هستن و مربوط به همون class هستن! اومدیم یک تووو رفتگی ایجاد کردیم! پس دلیل اون رفتگی‌ها اینه! هرچند قبلاً و در آموزش‌های مقدماتی خیلی تفصیلی‌تر صحبت کردیم!

در خط ۲، یکی از ویژگی‌ (property)های کلاسِ A رو تعریف کردیم! [همون ویژگی الف که در بخش مفهوم کلاس گفتیم!] و در واقع داریم میگیم در سال ۱۳۹۸ شمسی این کلاسِ خودرو تأسیس شده است!

در خط ۳ و ۴ دو ویژگی ب و پ که در بخش مفهوم کلاس گفتیم رو تعریف کردیم! (یعنی شرکت سازنده: کولاک! و اینکه شرکت سازنده: ایران)!

قبل از توضیح خطوط ۶ و ۷ اینو بگم که پیش فرض اینه که آموزش زیر رو خوندید [چون مربوط به بخش مقدماتی است!]:

آموزش تابع در پایتون

در خط ۶ و ۷ یک تابع تعریف کردیم! البته به تابع‌هایی که توی class (کلاس) تعریف میکنن، مِتُدْ هم میگن!

اسم تابع رو گذاشتیم sayKoolac (به معنی بگو کولاک!) و کاری که این تابع میکنه اینه که چاپ کنه: «کولاک»! [یعنی همووون دکمه‌ای که در بخش مفهوم کلاس در موردش صحبت کردیم!]

احتمالاً دارید می‌پرسید اووون self چیست؟!

ضمن عرض پوزش باید بگم تا آموزش بعدی نمی‌تونم این رو توضیح بدم! وگرنه مجبورم کل آموزش رو تعطیل کنم و بپردازم به اون! خودش قشنگ یه آموزش دیگه رو می‌طلبه!

پس شتر دیدید، ندیدید! یعنی توی این آموزش هرجا self دیدید، بی‌خیالش شید فعلاً و بهش نگاه نکنید!

البته تجربه نشون داده که الان آموزش رو قطع می‌کنید و میرید توی اینترنت search میکنید که “self در پایتون”! ولی خواهشاً صبر کنید و آموزش رو خراب نکنید! و لطفاً فقط همراهی کنید!

ساخت یک شی یا نمونه از کلاس (class) در پایتون (Python)

یادتونه توی بخش مفهوم کلاس (class)، گفتیم اولین ماشینی که ازخط تولید این کلاسِ A میاد بیرون رو اسمش رو میذاریم Car01 ؟!

خب باید همون نمونه (instance) یا شی (object) رو در پایتون (python) هم بنویسیم!

میگیم از کلاسِ A یه نمونه بساز و این نمونه رو اسمش رو بذار Car01 ! همین!

فراخوانی متد یک کلاس (class) در پایتون (python)

حالا فرض کنید می‌خوایم اووون دکمه‌ای که بهش تووی بخش مفهوم کلاس اشاره کردیم و گفتیم روی هر ماشین هست رو فشار بدیم! تا بگه «کولاک»!

یعنی عملاً میخوایم متد یا تابع sayKoolac رو فراخوانی کنیم! در این صورت می‌گیم!:

و اون هم در خروجی چاپ میکنه: Koolac !

یعنی عملاً ما دکمه رو فشار دادیم و ماشین گفت: «کولاک»!

برگشت به عقب!

حالا که در زمینه مفهوم کلاس (class) و ساختار کلی اووون اووووستا شدیم! بذارید همون کدی که اول جلسه با دیدنش خوف کردیم رو دوباره بیاریم تا باهم بهش بخندیم!

بریم که کولاک کنیم!

خب در خط ۱ که یک نمونه (instance) یا شی (object) از کلاسی به اسم LinearRegression درست کرده!

در خط ۲ داره متد fit از اون نمونه‌ یا شی ای که در خط بالا ساخت رو فراخوانی میکنه (در واقع داره دکمه fit رو میزنه!)! والسّلام! (احتمالاً میپرسید اون X_train و y_train چیست؟! جواب اینه که اونا ورودی‌های تابع اند! البته ما در مثال بعدی به اون هم میرسیم!)

مثالی دیگر!

برای جا انداختن یه سری مفاهیم دیگه، مجبوریم در قالب یک مثال دیگه مطرحشوون کینم!

فرض کنید معلممووون به ما گفته برین حاصل جمع و ضرب اعداد زیر رو بدست بیارین!

از اونجایی که ما جَوگیر هستیم! و میخوایم با همین مبحث کلاس (class) که الان یاد گرفتیم اینو حل کنیم! پس قطعه کد زیر رو در نظر بگیرید، تا توضیح بدم!

در خط ۱، کلاسی به اسم ریاضی (riazy) تعریف کردیم! (یه اسم همینجوری است طبیعتاً! هرچی میخواید میتونید بذارید!)

در خط ۲ و ۳ اومدیم یه تابع تعریف کردیم به اسم جمع (jam) که میاد با گرفتن x (عدد اول) و عدد دوم (y)، حاصل جمعشووون رو چاپ میکنه!

لطفا دوباره نپرسید self چیست؟! چون قرار شد توی این آموزش درموردش صحبت نکنیم و در آموزش بعدی در موردش مفصل صحبت کنیم!

در خط ۴ و ۵، مشابه دو خط قبلی، ولی این بار تابع ضرب (zarb) تعریف کردیم!

 

در خط ۷، برای محاسبات تمرین اول (همون جمع و ضرب اعداد ۸ و ۴ !)، یک نمونه (instance) تعریف کردیم به اسم Tamrin_1 !

در خط ۸، مشابه توضیح خط ۷، واسه تمرین ۲، یه شی یا نمونه تعریف کردیم به اسم Tamrin_2 !

 

حالا در خط ۱۰ اومدیم واسه تمرین یک، دکمه محاسبه جمع رو فشار دادیم! تا بیاد جمع دو عدد ۸ و ۴ رو حساب کنه!

و در خط ۱۱، برای تمرین یک، این بار دکمه‌ی ضرب رو فشار دادیم! تا ضرب دو عدد ۸ و ۴ رو حساب کنه!

تمرین

حالا شما بیاید جمع و ضرب اعداد ۵ و ۷ رو مشابه کاری که من کردم، حساب کنید!

آیا مبحث کلاس (class) در پایتون (python) تموم شد؟! جواب: به هیچ وجه! حالا حالاها هستیم در خدمتتون! این محث هم خودش گسترده است و هم آسوون نیست! پس طبیعتاً آموزش‌های بیشتری رو میطبه و به این سادگی تموم نمیشه!

جلسه بعد: مفهوم self و تابع (متد) __init__