آشنایی با مفهوم کلاس در زبان برنامه نویسی پایتون


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

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

برای مثال زمانی که در برنامه ی خود از تابع ()append در کلاس list استفاده می کنیم لازم نیست بدانیم این فانکشن چطور طراحی و پیاده سازی شده است، بلکه تنها آرگومان های مورد نیاز را وارد این فانکشن می کنیم و آن را روی یک آبجکت از کلاس list اثر می دهیم. در این شرایط کلاس لیست در پشت پرده کارهای لازم را انجام می دهد و نتیجه را برمی گرداند یا اصطلاحا return می کند.

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

پیش از هر چیز باید کمی در مورد مفهوم Object (آبجکت یا شیء) بدانیم. جدای از فضای برنامه نویسی اگر از شما سؤال شود که در دنیای واقعی یک شیء چیست، خواهید گفت "هر چیزی که ماهیت فیزیکی داشته باشد یک شیء است." شما می توانید کارهایی را روی اشیاء انجام دهید، می دانید هر شیء چه شکل و رنگ و اندازه ای دارد، چه کارهایی می توان با آن انجام داد و غیره. در حقیقت ما می توانیم اشیاء را از روی صفات یا خصوصیت آن ها شناسایی کنیم. بنابراین برای اشیاء واقعی
- کارهایی وجود دارد که می توانیم روی آن ها یا با آن ها انجام دهیم،
- چیزهایی که می توانیم آن اشیاء را با آن ها توصیف کنیم.

در مورد آبجکت ها یا بهتر بگوییم اشیاء مورد استفاده در زبان های برنامه نویسی نیز شرایط یکسانی صدق می کند. در زبان پایتون خصوصیاتی که اشیاء با آن ها توصیف می شوند Attribute (اَتریبیوت یا خصوصیت) نامیده می شوند و کارهایی که روی اشیاء انجام می شود Method (متد) نامیده می شوند.

برای نمونه، اگر بخواهیم اپلیکیشنی را در زبان پایتون پیاده سازی کنیم که لازم است شیئی مانند توپ را در آن شبیه سازی کنیم، این شیء صفاتی مانند اندازه، جنس، رنگ و وزن خواهد داشت و متدهایی مانند شوت کردن، باد کردن، پرتاب کردن و ... را می توان روی آن اجرا کرد. فرض کنیم برای نشان دادن آبجکت یا شیء مورد نظر، خود از شناسه ی ball استفاده کنیم (قبلاً گفتیم که هر شیء نیاز به یک شناسه دارد که با آن معرفی می شود.) در این صورت، ویژگی های توپ مد نظر به صورت زیر خواهد بود:

ball.color
ball.size
ball.weight

و هم چنین متدهای زیر را می توانیم برای توپ در نظر بگیریم:

Ball.kick()
Ball.throw()
Ball.inflate()

همان طور که گفتیم هدف ما این است که اشیائی از انواع مختلف را در برنامه ی خود بسازیم و از آن ها استفاده کنیم. ساخت یک شیء در زبان پایتون دو مرحله دارد. در مرحله ی اول لازم است که مشخص کنیم یک شیء خاص چه خصوصیاتی دارد و چه کارهایی می تواند انجام دهد؛ در حقیقت ابتدا باید اتریبیوت ها و متدهای آن را تعریف کنیم.

اما تعریف این موارد، منجر به ایجاد یک شیء نخواهد شد. این کار مثل آن است که نقشه ی یک خانه را بکشیم که نشان می دهد خانه ی ما به چه شکل است اما این نقشه «تکه کاغذی بیش نخواهد بود» و حقیقتاً یک خانه قابل سکونت نیست، بلکه می توان برای ساخت یک نمونه خانه ی واقعی از آن استفاده کرد.

در واقع از این نقشه نه تنها برای ساخت یک خانه، بلکه برای ساخت هر تعداد خانه ی دلخواه می توان استفاده کرد. کلاس های پایتون نیز دقیقاً مانند یک نقشه هستند که می توان ابتدا کلاس ها را ایجاد کنیم و آن گاه از روی آن ها به تعداد مورد نیاز آبجکت ایجاد کنیم. اجازه دهید در یک مثال نحوه ی تعریف یک کلاس در زبان پایتون را بررسی کنیم. قطعه کد زیر وظیفه ی ایجاد کلاسی با نام MyClass را بر عهده دارد:

class MyClass:
    MyVar = 0

برای تعریف یک کلاس لازم نیست پیچیدگی خاصی وجود داشته باشد. اولین خط از کلاس ساده ی بالا با کلمه ی کلیدی class آغاز می شود که به مفسر پایتون اعلام می کند در حال تعریف یک کلاس هستیم. پس از کیورد class، نام دلخواهی آمده است که با شناسه ی MyClass مشخص شده است. این کدها را در فایلی تحت عنوان MyClass.py ذخیره می سازیم. تعریف هر کلاس دیگری نیز در زبان پایتون به همین شکل خواهد بود. پس از نام کلاس از علامت : استفاده می کنیم و آن گاه از خط بعد محتویات کلاس را با رعایت تورفتگی نسبت به خط شروع تعریف کلاس می نویسیم. در این جا کلاس تعریف شده تنها شامل یک متغیر به نام MyVar است که مقدار 0 را به آن اختصاص داده ایم. حال هر نمونه ی ساخته شده از این کلاس شامل این متغیر با مقدار اولیه ی 0 خواهد بود.

اکنون که کلاس دلخواه خود را تعریف کردیم، می خواهیم وارد مرحله ی دوم نمونه سازی شویم. فرض کنید می خواهیم شیء نمونه ای از کلاس MyClass با نام myInstance ایجاد کنیم. برای این کار کافی است قطعه کد زیر را وارد کنیم:

myInstance = MyClass()

با این کار نمونه ای از کلاس MyClass را ایجاد کردیم و به شیء myInstance ارجاع دادیم. دقت داشته باشید که این کد نباید در داخل بدنه ی تعریف کلاس صورت گیرد. حال قطعه کد زیر را امتحان می کنیم:

print(myInstance.MyVar)

به عنوان خروجی سورس کد فوق داریم:

0
>>>

اگر متغیر MyVar را به عنوان یک اتریبیوت کلاس MyClass در نظر بگیریم، شیء myInstance نیز این اتریبیوت را دارد و همان طور که می بینید برای دسترسی به آن کافی است نام شیء را بیاوریم و در ادامه ی آن یک دات (.) و سپس نام اتریبیوت را وارد کنیم.

در این مثال، از آنجا که در کلاس مورد نظر به اتریبیوت MyVar مقدار 0 را داده بودیم بنابراین برای شیء myInstance که نمونه ای از آن کلاس است هم مقدار اولیه ی این اتریبیوت همان 0 است. با این وجود ما می توانیم این مقدار اولیه را برای این شیء تغییر دهیم. برای این کار کافی است به شکل زیر عمل کنیم:

myInstance.MyVar = 100
print(myInstance.MyVar)

نتیجه به صورت زیر خواهد بود:

100
<<<

در واقع ما با این کار، مقدار اولیه ی اتریبویت MyVar را اصطلاحا Override (اورراید یا بازنویسی) کرده ایم.

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
کاربر میهمان
۱۳۹۶/۱۲/۲۲
رحمت به امواتت که اینقدر ساده توضیح دادی!
dehishov
dehishov
۱۳۹۶/۰۶/۲۰
خیلی ممنون از سایت خوبتون اینجا از هرجا کلاس رو بهتر توضیح داده. لطفا همینطور ساده و خوانا توضیح بدین. من هر جا میرم که به عنوان مثال پایتون یاد بگیرم فک میکنن با یه برنامه نویس حرفه ای طرف هستن و به عنوان مثال میگن: (بچه ها یادتون هست مثلا کلاس در زبان سی پلاس پلاس چجوری بود پایتون هم هینطوره!!) خب میخواید توضیح بدید یا یاد آوری کنید!!؟در کل خیلی ممنون
useramin47
useramin47
۱۳۹۶/۰۴/۲۸
سلام
در خط اخر فکر کنم کلمه override(لغوکردن) با کلمه overwrite (بازنویسی)اشتباه گرفته شده.
با تشکر از سایت خوبتون.
کاربر میهمان
کاربر میهمان
۱۳۹۵/۰۵/۳۱
سلام لطفا ادامه پایتون را بگذارید
nafisse
nafisse
۱۳۹۵/۰۵/۲۷
متشکر از آموزش خوبتون
لطفا ادامه دهید
mahdi66
mahdi66
۱۳۹۵/۰۵/۲۵
سلام مشکلی پیش اومده که دیگه اموزش ادامه پیدا نکرده واقعا ما منتظر اموزشهای عالیتون هستیم لطف کنید وسط کار ما را رها نکنید
ادمین سایت
ادمین سایت
۱۳۹۵/۰۵/۲۵
سلام و عرض ادب
خیر ادامه ی دوره در دست تالیف است و به محض آماده شدن منتشر خواهد شد.

با تشکر از شکیبایی شما
ارادتمند
تیم سکان آکادمی

در پاسخ به

کاربر میهمان
کاربر میهمان
۱۳۹۵/۰۵/۲۱
سلام . ادامه تدریس کی شروع میشه . خیلی از کاربران درخواست ادامه تدریس رو دارن .
Saeed
Saeed
۱۳۹۵/۰۵/۱۲
خیلی عالیه دستتون دردنکنه امیدوارم ادامه داشته باشه
Nazeri
Nazeri
۱۳۹۵/۰۵/۰۹
احسنت. خیلی عالی و آسون توضیح دادین