سلام منمتوجه نمیشم چرا self رو تو ورودی هر def داریم چیکار میکنه و اگه نباشه چی میشه
سلاااااااااااااااام علی جان
یادآوری:
به عنوان یه برنامه نویس قبل پرسیدن سوال وظیفه تون هست که اول سرچ کنید، مقاله بخونید، ویدیو ببینید و بعد اگر باز هم نیاز به راهنمایی یا جواب دقیقتری داشتید تاپیک بزنید.
اگر این کارها رو انجام دادی همیشه تو تاپیک بگو که من فلان کار رو کردم، فلان مقاله رو خوندم ولی هنوز فلان قسمت رو درک نکردم. یا توضیح دقیقتر میخوام.
اگر هم این کارهایی که گفتم رو انجام ندادی توصیه میکنم اول بری انجام بدی و بعد جواب پایین رو بخونی.
موفق باشی :)
تو syntax زبان پایتون این قانون رو داریم که تمام ابجکت متدها باید اولین ورودی شون خود ابجکت باشه که اسمش رو اکثرا self میذاریم.
ما برای کلاس 3 نوع متد میتونیم بنویسیم:
1. ابجکت متد (method or object method)
2. کلاس متد (classmethod)
3. استاتیک متد (staticmethod)
ابجکت متدها اولین ورودی شون همیشه خود ابجکت هست. چون اون متدی که مینویسید مربوط به متد هست و احتمالا قراره تغییری توی متد، صفت هاش (attribute هاش) و هر چیز دیگه ای که مربوط به ابجکت هست بدید.
کلاس متدها اولین ورودی شون همیشه خود کلاس هست و احتمالا تو اینطور متدها قراره کاری با خود کلاس یا ابجکت هاش بکنید. مثلا طبق دیزاین پترن فکتوری میخواهید یه ابجکت بسازید. یا اطلاعاتی از ابجکتهای این کلاس بدید و امثالهم.
استاتیک متدها مثل نوعهای قبلی که گفتم نیستن. اولین ورودی پیش فرض ندارن. تو این نوع متدها میخواهید یه کاری انجام بدید که احتمالا نیاز به خود اون ابجکت یا کلاس ندارید. و معمولا برای تمیز بودن کد و این که تابع رو با namespace کلاس میخواستید تعریف کنید اومدید از استاتیک متد استفاده کردید. مثلا توابع کمکی (utils)
اگر داخل متد نیازی به خود ابجکت نداری میتونی به صورت استاتیک متد تعریفش کنی.
کار خاصی نمیکنه. فقط چون ابجکت متدها معمولا قراره یه کاری با خود ابجکت یا صفت هاش انجام بده، همیشه پایتون به عنوان اولین ورودی پاسش میده.
اگر نوع متد ات، ابجکت متد هست که خب باید اولین ورودیش خود ابجکت باشه. و اگر میخوای نباشه که باید استاتیک متد بنویسی.