PDA

View Full Version : تعداد پارامتر ورودی



mehdi3356
پنج شنبه 10 مرداد 1398, 20:11 عصر
150555
با سلام:
سوالم اینه که چرا موقع تعریف چهار پارامتر ورودی داریم اما موقع صدا زدن متد با سه تا صدا میزنیم.
سوال دیگم هم اینه که اون super() اشاره به کدوم شی داره

sd702004
پنج شنبه 10 مرداد 1398, 22:25 عصر
self (که میتونید هر نام دیگه ای هم بجاش بذارید) اشاره داره به خود کلاس و میشه اونو یک اینستنس از کلاس در نظر گرفت (تا حدی مشابه this در زبان هایی مثل سی++ یا جاوا). دلیل این که self رو به درون constructor و متدها pass میکنیم اینه که بشه به متدها و اعضای کلاس دسترسی داشت. هنگام ساخت یک instance از کلاس یا فراخوانی متدها، self بصورت خودکار pass میشه و بنابراین نیازی نیست (و نباید) موقع فراخوانی اون رو بنویسیم.

مثلا در constructor متغیرهایی به نام square_feet و num_bedrooms تعریف شده. اگر این متغیرهای بدون پیشوند self تعریف میشدن فقط در scope خود constructor بودن و در خارج از __init__ امکان دسترسی بهشون نبود. یا مثلا در این کلاس متدی وجود داره به نام display که هیچ آرگومانی موقع فراخوانی نمیگیره اما در بدنه همین تابع از متغیرهای num_bedrooms و num_batchs استفاده شده و دلیل اینکه این کار امکان پذیره اینه که در تعریف این متد، self رو بهش pass کردیم

mehdi3356
جمعه 11 مرداد 1398, 08:55 صبح
ممنون از پاسخی که دادید اما سوال من این بود که چرا ما چهار پارامتر ورودی داریم اما به سه تا صدا می زنیم.
و

super().init(**kwargs)

اشاره به کدوم کلاس داره ما که از کلاسی به صورت وراثت استفاده نکردیم

sd702004
جمعه 11 مرداد 1398, 10:41 صبح
*args و **kwargs آرگومان های اختیاری هستن و هنگام فراخوانی ضرورتی به نوشتن شون نیست. اولی از نوع tuple و دومی از نوع keyword ـیه. البته در مثال شما چون تمام آرگومانها مقداردهی پیشفرض شدن همه شون تبدیل به نوع اختیاری شدن

در رابطه با سوال دوم در پایتون وقتی یک کلاس میسازیم، این کلاس به طور خودکار یک زیرکلاس از Object هستش. در واقع Object پرنت تمام کلاس های پایتونه. فکر نمیکنم نیازی باشه تا صریحا کانستراکتر این کلاس فراخوانی بشه

توضیح راهنمای پایتون:

object (https://docs.python.org/3/library/functions.html?highlight=object#object) is a base for all classes. It has the methods that are common to all instances of Python classes