Share on facebook
فیسبوک
Share on twitter
توئیتر
Share on linkedin
لینکدین
Share on telegram
تلگرام
Share on whatsapp
واتساپ

بانک تمرین پایتون – کاربرد private کردن در class (کلاس) در پایتون

در این مطلب از مجموعه مطالب تمرین پایتون ، به بررسی تمرین های مختلفی درباره private کردن در class (کلاس) در زبان برنامه نویسی پایتون (python) صحبت می‌کنیم!

تمرین پایتون : (سطح: متوسط) [البته برای کسی که مبحث رو بلده!]

طرح مسأله تمرین پایتون! 

اصلاً بذارید بگم که قراره در ادامه چیکار بکنیم و به چه هدفی برسیم!:

میخوایم مثلاً لیست نمراتمون رو بدیم به یک کلاسی به اسم Scores !

فرض کنید نمرات ما به صورت زیر است!:

[17,15,18,20,19]

حالا class ما باید چند قابلیت داشته باشه!

  1. بتونه اولین نمره‌مون رو بده!
  2. بتونه آخرین نمره‌مون رو بده!
  3. بتونه میانگین نمرات‌مون رو بده!
  4. بتونه سه‌تا از بهترین نمراتمون رو خروجی بده!

پیاده‌سازی تمرین پایتون !

کد زیر رو در نظر بگیرید تا توضیح بدم!

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__ !

به واسطه حضورِ مِتُدِ گرانقدرِ __init__ به محض ایجاد یک شی از این کلاس؛ اولاً اون لیست نمرات (scores_list) رو که باید در حین تعریف شی جدید، از کاربر بگیره! و بعد برای شی ساخته‌شده از این کلاس، بیاد یک ویژگی (attribute) به اسم scores درست کنه [که درواقع برابر است با همون scores_list که کاربر وارد کرده]!

توضیح متد first_score !

متد first_score کارش اینه که اولین نمره ما رو خروجی بده! (می‌دونیم که پایتون شماره‌گذاری رو از صفر شروع میکنه! برای همین گفتیم از اون لیست نمرات که درواقع همون self.scores هست! بیاد مولفه‌ی صفرم رو خروجی بده!)

توضیح متد last_score !

متد last_score کارش اینه که بیاد آخرین مولفه از لیست نمرات رو خروجی بده! [توجه: فرض بر اینه که وقتی اومدید تمرین حل کنید، خود مبحث رو بلدید! ولی یادآوری میکنم که اندیس 1- یعنی آخرین مولفه!]

توضیح متد mean_score !

متد mean_score کارش اینه که بیاد میانگین نمرات ما رو بده! [روال کارش هم اینه که میاد جمعِ نمرات رو تقسیم میکنه بر تعداد نمرات موجود در لیست تمرات!]

توضیح متد nlargest !

متد nlargest__ از متدهای خوف روزگار است! این متد فقط کافیه بهش n و یک لیست رو بدید! میاد بهتون nتا از بزرگترین مولفه‌های همون لیستی که بهش دادید، رو بر میگردونه!

روال کار این متدهم این شکلی است که:!

میاد لیست داده شده رو به صورت نزولی مرتب میکنه! و میریزه توی متغیری به اسم L ! (توجه داریم که وقتی نمرات رو به نزولی مرتب می‌کنید، کلّه‌گنده‌ها و نمرات خوبمون اول قرار میگیرن و نمرات افتضاح‌ترمون آخر لیست قرار میگیرن!)

حالا در ادامه داریم میگیم از اون L (همون لیست نمرات ماست که به صورت نزولی مرتب شده!) بیا n مولفه اول رو بده! [که این باعث میشه تا nتا از بهترین و بالاترین نمراتون رو بهمون بده!]

در ضمن اسم متد که n largest بود هم بیانگر همین بود! ترجمش میشه: nتا بزرگ‌ترین!

حالا شاید بپرسید چرا با اووون __ اومدیم این متد رو private کردیم! [دوباره تاکید میکنم هدف از تمرین، آموزش نیست! و فرض بر اینه که شما private کردن رو بلدید و فقط اومدید تمرین کنید!]

دلیلش رو جلوتر توضیح میدم! یکم باید صبر کنید!

توضیح متد top_3 !

متد top_3 هم میاد 3تا از بهترین نمره‌ها رو میده! (این متد از متدِ گراتقدرِ nlargest استفاده میکنه!)

بذارید برگردیم به متد nlargest تا یک توضیح دیگه هم اضافه کنم!

خب حالا میتونم توضیح بدم که چرا اون متد nlargest رو private کرده بودیم! دلیلش اینه که ما این متد nlargest رو صرفاً به این دلیل ایجاد کردیم که خودمون بتونیم در محاسبات خودمون ازش استفاده کنیم! نه اینکه بعداً کاربر بتونه ازش استفاده کنه!

چون میخواستیم فقط خودمون بتونیم برای محاسبات خودمون در داخل class ازش استفاده کنیم! ولی نمی‌خواستیم کاربر بتونه بیرون از فضای class ازش استفاده کنه! برای همین اومدیم private کردیم!

خب حالا بریم سراغ اجرای یک مثال از این class!

بریم که شروع کنیم!

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) + مثال کاربردی

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp
ارسال دیدگاه

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

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

    آموزش کامل پایتون
    آموزش کامل پایتون

    + جزوه اختصاصی (به تفکیک فیلم که دیگه نیازی نیست جزوه بنویسید)
    + دارای تمرین

    + مدرس: سجّاد رحمانی

    توضیحات بیشتر