شی‌گرایی در پایتون

ارث‌بری در شی‌گرایی

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

این عمل باعث می‌شود که زمانی که در شی‌گرایی نیاز به دو کلاس باشد. مثلا یک کلاس دانشجو و یک کلاس فارق التحصیل. بجای اینکه در کلاس فارق‌التحصیل دوباره اطلاعات دانشجو را وارد کنیم. کلاس فارق‌التحصیل را ارث‌بری می‌کنیم از کلاس دانشجو. در این صورت تمام متدها و ویژگی‌هایی که کلاس دانشجو دارد کلاس فارق‌التحصیل هم ارث‌بری می‌کند.

ارث‌بری در شی‌گرایی

در کد فوق یک کلاس مادر ایجاد کرده‌ایم که دارای دو متد می‌باشد. متد اول ()who_I_am می‌باشد و متد دوم ()eat می‌باشد. در کلاس فرزند می‌توانیم از متدهای کلاس مادر یعنی دو متد فوق، استفاده کنیم و یا آن را تغییر دهیم.  همچنین می‌توان در متد init کلاس فرزند، متد init کلاس مادر را استفاده کرد.

 

ارث‌بری در شی‌گرایی

در کد فوق کلاس فرزند Dog را ایجاد کرده‌ایم. در متد init کلاس فرزند، متد init کلاس مادر (Animal) را نیز قرار داده‌ایم. با این کار در شی‌گرایی زمانی که یک نمونه از کلاس فرزند (Dog) بگیریم، عملیات print که در متد init کلاس مادر وجود داشت نیز به همراه عملیات print کلاس فرزند، انجام می‌شود.

همچنین اگر متد who_I_am که در کلاس مادر است را با نام نمونه کلاس فرزند فراخوانی کنیم. عملیات مربروط به متد who_I_am انجام می‌شود.

در مورد متد eat از آنجایی که هم در کلاس مادر و هم در کلاس فرزند وجود دارد. ابتدا چک می‌شود اگر در کلاس فرزند وجود دارد همان متد و عملیات مربوط به آن در کلاس فرزند انجام می‌شود.

کاربرد تابع ()super  در شی‌گرایی

در شی‌گرایی اگر  بخواهیم ویژگی‌های متد init کلاس مادر را در متد init کلاس فرزند داشته باشیم. از تابع super در داخل متد init کلاس فرزند استفاده می‌کنیم.

ارث‌بری در شی‌گرایی

 

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

ارث‌بری کلاس‌ها در شی‌گرایی نحوه ارث‌بری در شی‌گرایی

کپسوله‌سازی در شی‌گرایی

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

به عنوان مثال اگر ما یک کلاس به نام Car داشته باشیم. و از این کلاس یک شی بسازیم. می‌توانیم ویژگی‌های این کلاس را تغییر دهیم.

کپسوله سازی در شی‌گرایی

 

در شی‌گرایی اگر بخواهیم کلاس را کپسوله کنیم، تا متغیرهای کلاس قابل تغییر نباشند، بر طبق قرارداد پشت متغیر مورد نظر دوتا _ یا آندرلاین بذاریم.

نحوه کپسوله سازی در شی‌گرایی

در کد فوق دو تا آندرلاین قبل از ویژگی color قرار داده‌ایم. با این کار اگر از کلاس یک نمونه بسازیم. و بعد بخواهیم ویژگی این نمونه را عوض کنیم. به دلیل کپسوله‌سازی ویژگی مورد نظر، برنامه به ما خطا می‌دهد که اصلا همچین ویژگی نداریم.

 

از آنجایی که در شی‌گرایی کلاس کپسوله‌سازی شده را نمی‌شود از بیرون ویژگی‌هایش را عوض کرد. اگر بخواهیم ویژگی‌های کلاس را تغییر دهیم، باید از داخل کلاس این کار را انجام دهیم. یعنی باید دو تا متد بسازیم. یکی برای ست کردن متغیر جدید و یکی برای چاپ کردن آن. در شی‌گرایی و کپسوله‌سازی به این دو متد set و get می‌گویند.

تابع set و get در کبسوله سازی در شی‌گرایی

 

متد‌های خاص در شی‌گرایی

در شی‌گرایی این متدها را معمولا با __در دو طرف اسم متد نمایش می‌دهند، و عملیات خاصی را به صورت پیش فرض انجام ‌می‌دهند. به عنوان مثال در هنگام پرینت از آبجکتی که ساخته‌ایم یک سری نوشته ظاهر می‌شود که اگر بخواهیم آن را تغییر دهیم می‌توان از متد __str__ استفاده کرد.

متد __str__ در شی‌گرایی

 

تابع len به طور کلی تعداد اعضا را نشان می‌دهد، در شی‌گرایی می‌توان در داخل کلاس با استفاده از متد __len__ بجای تعداد اعضا، هر چیز دیگری که بخواهیم را با فراخوانی این تابع نمایش دهیم.

متد len در شی‌گرایی

 

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

متد del در شی‌گرایی

 

برای آشنایی بیشتر با مباحث شی‌گرایی و نحوه کار با آن‌ها می‌توانید به دوره جامع آموزش زبان برنامه‌نویسی پایتون  آکادمی رسا مراجعه کنید

0/5 (0 Reviews)

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست