Capture.PNG
با سلام:
سوالم اینه که چرا موقع تعریف چهار پارامتر ورودی داریم اما موقع صدا زدن متد با سه تا صدا میزنیم.
سوال دیگم هم اینه که اون super() اشاره به کدوم شی داره
Capture.PNG
با سلام:
سوالم اینه که چرا موقع تعریف چهار پارامتر ورودی داریم اما موقع صدا زدن متد با سه تا صدا میزنیم.
سوال دیگم هم اینه که اون super() اشاره به کدوم شی داره
self (که میتونید هر نام دیگه ای هم بجاش بذارید) اشاره داره به خود کلاس و میشه اونو یک اینستنس از کلاس در نظر گرفت (تا حدی مشابه this در زبان هایی مثل سی++ یا جاوا). دلیل این که self رو به درون constructor و متدها pass میکنیم اینه که بشه به متدها و اعضای کلاس دسترسی داشت. هنگام ساخت یک instance از کلاس یا فراخوانی متدها، self بصورت خودکار pass میشه و بنابراین نیازی نیست (و نباید) موقع فراخوانی اون رو بنویسیم.
مثلا در constructor متغیرهایی به نام square_feet و num_bedrooms تعریف شده. اگر این متغیرهای بدون پیشوند self تعریف میشدن فقط در scope خود constructor بودن و در خارج از __init__ امکان دسترسی بهشون نبود. یا مثلا در این کلاس متدی وجود داره به نام display که هیچ آرگومانی موقع فراخوانی نمیگیره اما در بدنه همین تابع از متغیرهای num_bedrooms و num_batchs استفاده شده و دلیل اینکه این کار امکان پذیره اینه که در تعریف این متد، self رو بهش pass کردیم
آخرین ویرایش به وسیله sd702004 : پنج شنبه 10 مرداد 1398 در 22:39 عصر
ممنون از پاسخی که دادید اما سوال من این بود که چرا ما چهار پارامتر ورودی داریم اما به سه تا صدا می زنیم.
و
super().init(**kwargs)
اشاره به کدوم کلاس داره ما که از کلاسی به صورت وراثت استفاده نکردیم
*args و **kwargs آرگومان های اختیاری هستن و هنگام فراخوانی ضرورتی به نوشتن شون نیست. اولی از نوع tuple و دومی از نوع keyword ـیه. البته در مثال شما چون تمام آرگومانها مقداردهی پیشفرض شدن همه شون تبدیل به نوع اختیاری شدن
در رابطه با سوال دوم در پایتون وقتی یک کلاس میسازیم، این کلاس به طور خودکار یک زیرکلاس از Object هستش. در واقع Object پرنت تمام کلاس های پایتونه. فکر نمیکنم نیازی باشه تا صریحا کانستراکتر این کلاس فراخوانی بشه
توضیح راهنمای پایتون:object is a base for all classes. It has the methods that are common to all instances of Python classes