در این مطلب از مجموعه مطالب تمرین پایتون ، به بررسی تمرین های مختلفی درباره private کردن در class (کلاس) در زبان برنامه نویسی پایتون (python) صحبت میکنیم!
اصلاً بذارید بگم که قراره در ادامه چیکار بکنیم و به چه هدفی برسیم!:
میخوایم مثلاً لیست نمراتمون رو بدیم به یک کلاسی به اسم Scores !
فرض کنید نمرات ما به صورت زیر است!:
[17,15,18,20,19]
حالا class ما باید چند قابلیت داشته باشه!
کد زیر رو در نظر بگیرید تا توضیح بدم!
class Scores(object): def __init__(self, scores_list): self.scores = scores_list def first_score(self): return self.scores[0] def last_score(self): return self.scores[-1] def mean_score(self): return sum(self.scores)/len(self.scores) def __nlargest(self,n,scores): L=sorted(scores,reverse=True) return L[:n] def top_3(self): return self.__nlargest(3, self.scores)
در بالا یک کلاس (class) تعریف کردیم به اسم Scores! (در زبان انگلیسی Scores یعنی امتیاز، نمره! البته در اصل ما برای نمرهی درسی بهتره از لفظ mark استفاده کنیم! ولی فعلاً به بخش زبانانگلیسیش کار نداریم!)
به واسطه حضورِ مِتُدِ گرانقدرِ __init__ به محض ایجاد یک شی از این کلاس؛ اولاً اون لیست نمرات (scores_list) رو که باید در حین تعریف شی جدید، از کاربر بگیره! و بعد برای شی ساختهشده از این کلاس، بیاد یک ویژگی (attribute) به اسم scores درست کنه [که درواقع برابر است با همون scores_list که کاربر وارد کرده]!
متد first_score کارش اینه که اولین نمره ما رو خروجی بده! (میدونیم که پایتون شمارهگذاری رو از صفر شروع میکنه! برای همین گفتیم از اون لیست نمرات که درواقع همون self.scores هست! بیاد مولفهی صفرم رو خروجی بده!)
متد last_score کارش اینه که بیاد آخرین مولفه از لیست نمرات رو خروجی بده! [توجه: فرض بر اینه که وقتی اومدید تمرین حل کنید، خود مبحث رو بلدید! ولی یادآوری میکنم که اندیس 1- یعنی آخرین مولفه!]
متد mean_score کارش اینه که بیاد میانگین نمرات ما رو بده! [روال کارش هم اینه که میاد جمعِ نمرات رو تقسیم میکنه بر تعداد نمرات موجود در لیست تمرات!]
متد nlargest__ از متدهای خوف روزگار است! این متد فقط کافیه بهش n و یک لیست رو بدید! میاد بهتون nتا از بزرگترین مولفههای همون لیستی که بهش دادید، رو بر میگردونه!
روال کار این متدهم این شکلی است که:!
میاد لیست داده شده رو به صورت نزولی مرتب میکنه! و میریزه توی متغیری به اسم L ! (توجه داریم که وقتی نمرات رو به نزولی مرتب میکنید، کلّهگندهها و نمرات خوبمون اول قرار میگیرن و نمرات افتضاحترمون آخر لیست قرار میگیرن!)
حالا در ادامه داریم میگیم از اون L (همون لیست نمرات ماست که به صورت نزولی مرتب شده!) بیا n مولفه اول رو بده! [که این باعث میشه تا nتا از بهترین و بالاترین نمراتون رو بهمون بده!]
در ضمن اسم متد که n largest بود هم بیانگر همین بود! ترجمش میشه: nتا بزرگترین!
حالا شاید بپرسید چرا با اووون __ اومدیم این متد رو private کردیم! [دوباره تاکید میکنم هدف از تمرین، آموزش نیست! و فرض بر اینه که شما private کردن رو بلدید و فقط اومدید تمرین کنید!]
دلیلش رو جلوتر توضیح میدم! یکم باید صبر کنید!
متد top_3 هم میاد 3تا از بهترین نمرهها رو میده! (این متد از متدِ گراتقدرِ nlargest استفاده میکنه!)
خب حالا میتونم توضیح بدم که چرا اون متد nlargest رو private کرده بودیم! دلیلش اینه که ما این متد nlargest رو صرفاً به این دلیل ایجاد کردیم که خودمون بتونیم در محاسبات خودمون ازش استفاده کنیم! نه اینکه بعداً کاربر بتونه ازش استفاده کنه!
چون میخواستیم فقط خودمون بتونیم برای محاسبات خودمون در داخل class ازش استفاده کنیم! ولی نمیخواستیم کاربر بتونه بیرون از فضای class ازش استفاده کنه! برای همین اومدیم private کردیم!
بریم که شروع کنیم!
my_scores=Scores([17,15,18,20,19])
در اینجا یک شی (object یا instance هم بهش میگن!) درست کردیم به اسم my_score !
موقع ساختن این شی بزرگوار! بهش یک لیست شامل اعداد 17و15و18و20و19 داده شده!
print( my_scores.first_score() ) print( my_scores.last_score() )
این دو خط بالا هم به ترتیب میاد با متدها first_score و last_score، اولین و آخرین مولفه لیست نمرات ما رو بهمون میده!
خروجی: به ترتیب 17 و 19
print( my_scores.mean_score() )
در اینجا هم داریم میانگین نمراتمون رو حساب میکنیم! [با متد means_score] که خروجیش میشه: 17.8 !
print( my_scores.top_3() )
با این متد top_3 هم که میایم 3تا ازبهترین نمراتمون رو خروجی میگیریم و به لطف اون تابع print، این نمرات درخشان رو چاپ میکنیم!
خروجی: [20, 19, 18]
این تمرین هم به پایان رسید! من برای نوشتن این تمرینات حقیقتاً تیکه پاره میشم! لطفاً کپی نکنید! بازهم تاکید میکنم هرگونه کپیبرداری [به هرشکل] کاملاً غیرمجاز و غیرقانونی وحرام است و هیچ گونه رضایتی را در برندارد!
شی گرایی – آموزش اشیاء و کلاس ها در پایتون (Python)
مفهوم self و تابع (متد) __init__ در پایتون (python) + مثال کاربردی
تعداد دیدگاه | 2 |
تعداد بازدید | 10.6K |
تاریخ انتشار | 14/04/2020 |
تاریخ بروزرسانی | 14/04/2020 |
نویسنده | گروه آموزشی کولاک |