Deadmarshal

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

Deadmarshal

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

۱ مطلب در مرداد ۱۳۹۴ ثبت شده است

مقدمه کلاس های پایتون (قسمت 1 از 2)

پنجشنبه, ۱۵ مرداد ۱۳۹۴، ۱۱:۳۷ ق.ظ

کلاس ها1 راهی برای گروه بندی تکه داده های مرتبط به یکدیگر در یک واحد (همچنین معروف به شیء2) است، با توابع3 که می توانند برای دستکاری شیء ها صدا زده شوند. برای مثال؛ اگر میخواهید اطلاعات درباره یک شخص را پیگیری کنید، شاید باید نام، آدرس و شماره تلفن او را در یک واحد قابل دستکاری ثبت کنید. 

پایتون روشی ناشیانه برای سروکار داشتن با کلاس ها دارد، پس حتی اگر با زبان های برنامه نویسی شیء گرا مانند جاوا و ++C نیز آشنایی داشته باشید، از آنجایی که تفاوت هایی در پایتون وجود دارد باید به نکات ضریفی توجه کنید.

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


تعیین یک کلاس پایتون

بیایید با تعیین یک کلاس شروع کنیم:

نام کلاس foo است، از دندانه گذاری برای مشخص کردن شروع و پایان کلاس استفاده می کنیم. در این مثال، کلاس حاوی دو توضیح تابع (یا متد) است، یکی با نام __init__ و دیگری printVal. همچنین یک متغیر عددی به صورت غیر مستقیم تعریف شده است، که در زیر آن را هم توضیح خواهیم داد.
عکس بالا نشان می دهد که کلاس معین شده به چه شکلی است. دو متد و یک متغیر عددی. با استفاده از این تعریف حال می توانیم چندین نمونه از کلاس ایجاد کنیم. 
میتوانید ببینید که هر دوی متغیر ها پارامتری به نام self را گرفته اند. به صورت سنتی این پارامتر بیشتر self نامیده می شود هرچند می توانید هر نامی به جای آن قرار دهید اما باعث گیج شدن برنامه نویسان دیگری که به کد شما نگاه می اندازند می شوید. به دلیل اینکه می توانیم چندین نمونه از کلاس ایجاد کنیم، وقتی متد کلاسی صدا زده شود، باید بداند که با کدام نمونه کار بکند، و اینجا آنجایی است که self به کمک ما خواهد آمد. 
__init__ متدی خاص است که وقتی پایتون نمونه جدیدی از کلاس میسازد صدا زده می شود(برای مثال: استفاده از چاقو برای ساختن کلوچه های کوچکتر). در مثال ما، یک پارامتر به نام val قبول می کند (به جز پارامتر الزامی self) و یک کپی از آن در متغیر عضو میگیرد، همچنین با نام val. خلاف زبان های دیگر، که متغیر ها قبل از استفاده باید معین شونند، پایتون متغیر ها را می سازد، وقتی اول معین شده باشند، و متغیر های عضو کلاس از این قائده مستثنی نیستند. برای تمایز متغیر val که به عنوان پارامتر وارد شده و متغیر val عضو کلاس، به دومی پیشوند self را اضافه می کنیم. پس، در جمله زیر:  
self.val به متغیر عضوی که متعلق به نمونه کلاس متدی است که صدا زده شده، اشاره می کند. و val به پارامتری که در متد رد شده است. 
اینها یکم گیج کننده است، پس بیایید به این مثال توجه کنیم:
این نمونه ای از کلاس ما می سازد(مثل چاقویی که کلوچه را میبرد). پایتون به صورت خودکار متد __init__ را برای ما صدا می زند، و ارزشی که ما معین کرده ایم را رد می کند(1). پس یکی از اینها رو میگیریم:
بیایید یکی دیگه بسازیم:
دقیقا چیزهای مشابه بالا اتفاق می افتد، تنها تفاوت این است که در متد __init__ عدد (2) رد می شود. 
حال ما دو شیء جدا داریم، با ارزش های مختلف برای متغیر عضو val.
اگر print.val را برای شیء اول صدا بزنیم، ارزش متغیر عضو آن چاپ می شود:
و اگر هم print.val را برای شیء دوم صدا بزنیم، ارزش متغیر عضو خودش را چاپ می کند:

۰ نظر موافقین ۰ مخالفین ۰ ۱۵ مرداد ۹۴ ، ۱۱:۳۷
Ali M