Programming? – Telegram
Programming?
12K subscribers
373 photos
645 videos
978 files
511 links
🏅Channel privileges

🎗Ninth year of operation
🎗Completely specialized members
🎗Transmitter in channel automation
🎗, ...

🎯 second channel Programming books 👇
@topbookit

🎯 third channel laptop👇
@sysline


👨🏻‍💻Admin channels : @coderme
Download Telegram
در قسمت قبل تا حدودی مبحث کلاس رو توضیح دادیم.
در این قسمت هم قرار شد توابع رو وارد کلاس هامون بکنیم.
توجه داشته باشین که این جلسات (یعنی از جلسه قبل که کلاس ها شروع شدن به بعد) خیلی مهم هستن.
خوب برای این که کلاسمون تابع داشته باشه، کافیه هنگام ساختنش تابع مورد نظرمون رو (مثل قبلا که تابع مینوشتیم) بنویسیم.

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

کلاس یه مجموعه ی منظمه، ممکنه شما بخواید داخل یکی از توابع کلاستون، به یه تابع دیگه از همون کلاس اشاره کنید، یا به یه متغیر دیگه از همون کلاس اشاره کنید.
بصورت استاندارد تمامی توابعی که در کلاس تعریف میشن باید آرگومان اولشون self باشه.
و حتی اگر تابعتون که داخل کلاس بود هیچ آرگومانی قرار نبود دریافت کنه، باید یه آرگومان self رو براش بذارید موقع نوشتنش.
و از طرف دیگه زمان اجرای تابع اصلا نیاز به دادن self نیست. و تنها باید بقیه ی آرگومان های بعد از self رو بهش بدید یا اگر آرگومان نمیگیره اصلا بهش آرگومان ندید.
مثال زیر بهتر بهتون کمک میکنه بفهمید:
👇👇👇👇👇
خوب حالا علت وجود این self چیه که هنگام ساخت تابع باید باشه ولی هنگام اجرا نباید باشه؟
دلیلش همونه مطلبیه که ابتدای همین قسمت بهش اشاره کردم.
یعنی ممکنه شما بخواید داخل تابع به بقیه ی توابع یا متغیر های تعریف شده داخل کلاس اشاره کنید.

نحوه کار کردش چطوریه؟
👇👇👇👇👇
همونطور که مشاهده کردین ما داخل کلاس یه متغیر به نام test تعریف کردیم و سپس داخل تابعی که تو کلاس تعریف کردیم با استفاده از آرگومان self به عنوان پیشوند، تونستیم به متغیر دسترسی پیدا کنیم.

حالا یه مثال از دسترسی به توابع:
👇👇👇👇👇
👍1
بعد از پیشوند self و نقطه، برای اجرای توابع باید پرانتز هاش رو و آرگومان هایی که میگیره رو بهش بدیم.
و زمان اجرای توابع داخل کلاس دیگه آرگومان self رو نمیدیم.
آرگومان الزامی self در توابع پایتون در واقع یک شئ از پیش ساخته شده از کلاسه، که با استفاده ازش به متغیر ها و توابع داخل کلاس دسترسی داریم.
و زمان اجرای توابع، پایتون خودش این شئ رو به عنوان آرگومان اول به تابع میده و به همین دلیل دیگه لازم نیست ما این کار رو بکنیم.

همچنین اینم بگم که بصورت استاندارد اسم این آرگومان self هستش، وگرنه میتونید آرگومان اول رو هر چیزی میخواید تعریف کنید، ولی داخل تابع برای دسترسی به بقیه ی توابع و کلاس ها باید از آرگومانی ک خودتون وارد کردید استفاده کنید.
به عنوان مثال:
👇👇👇👇👇
فصل قبل و این فصل رو از ابتدا تا به اینجا یک بار بخونید، اگر نفهمیدید دوباره بخونید، ...
اگر شده هزار بار بخونید، فقط مطمئن شید که حتما فهمیدینش.
چون از اینجا به بعد دیگه همش با class و self و ... سر و کار داریم.
حالا میخوایم یه برنامه بنویسیم که معدل یک دانش آموز رو حساب کنه.
خوب ما به 3 تا تابع نیاز داریم:

تابع اول: وظیفش اینه بهمون بگه چند تا درس برای معدل گیری داریم، یعنی باید داخل این تابع قطعه کدی بنویسیم که این کار رو بکنه (در اینجا ما ورودی رو از کاربر میگیریم).


تابع دوم:
این تابع وظیفش اینه به اندازه ی تعداد درس ها، نمره ها رو از کاربر بگیره و همرو تحت ساختار داده ای list بهمون بده.


تابع سوم:
معدل یه لیست از نمرات رو حساب میکنه.


پس کلاسمون میشه:
👇👇👇👇👇
توضیح ()input :
جزو توابع و کلاس های توکار پایتونه و یک رشته رو به عنوان آرگومان میپذیره و زمان اجرا اون رشته رو نمایش میده و بعد از اون هرچی کاربر بنویسه رو تا زمان زدن دکمه ی اینتر، به عنوان ورودی و تحت ساختار داده ای رشته برمیگردونه.

ما داخل تابع اول از کاربر تعداد درس رو به عنوان ورودی گرفتیم و با استفاده از تابع تو کار ()int اون رو از رشته به عدد تبدیل کردیم و با استفاده از آرگومان self مقدار متغیر total_numbers رو برابر با ورودی که گرفتیم قرار دادیم.



در تابع اول ما متغیر total_numbers رو ساختیم و بعدش تابع دوم رو اجرا کردیم که برای دسترسی به تعداد درس ها با استفاده از self به این متغیر دسترسی پیدا میکنه و به همون اندازه از کاربر نمره ی درس هارو میگیره و داخل یه لیست میریزه و در آخر مقدار متغیر numbers رو با استفاده از self برابر با اون لیست قرار میده.


تابع سوم با استفاده از آرگومان self به متغیر numbers دسترسی داره که بعد از اجرای تابع دوم ساخته شده.
معدل رو حساب میکنه و بهمون میده.


توجه کنید که اگر داخل کلاس یه متغیر به نام test داشتید، و داخل توابع کلاس هم متغیری به نام test تعریف کردید، این دو تا با هم یکی نیستن، بلکه داخل تابع اون متغیر test مربوط به کلاس به self.test شناخته میشه و متغیر test داخل تابع به همون test شناخته میشه.
به مثال زیر توجه کنید:
👇👇👇👇👇
خوب برنامه ی معدل گیری ما قابل فهم بود.
ولی نکتش اینجا بود که توابع باید حتما به ترتیب اجرا میشدن، برای مثال اگر تابع اول اجرا نمیشد، متغیر total_numbers ساخته نمیشد که تابع دوم ازش استفاده کنه و ...

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

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

به این میگن برنامه نویسیه منظم !