شما اینجا هستید:

مفهوم self و تابع (متد) __init__ در پایتون (python) + مثال کاربردی

مفهوم self در پایتون (python) چیست؟! تابع __init__ چطور؟! این سوالاتی است که با یک مثال کاربردی و تمرین به طور کامل در این آموزش یاد خواهیم گرفت! فقط مهمترین موضوع اینه که با ما پیش بیاید و پیش‌نیازها رو رعایت کنید! یعنی مثلاً اگر می‌گیم پیش‌نیاز این آموزش، درس مربوط به کلاس (class) است، باید مراجعه کنید! چون سنگ بنای این مبحث اونه! ولی اگر می‌گید وِلِش کن بابا! یه چیزی واسه خودش گفت! باید بگم این احتمال که این مبحث رو نفهمید رو هم لطفاً بپذیریذ! اما اگر پیش‌نیازها رو رعایت کنید و با ما کامل پیش بیاید، اطمینان کامل داشته باشید، محاله یاد نگیرید!

مطالب پیش نیاز!

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

شی گرایی- آموزش اشیاء و کلاس ها در پایتون (Python)

مثال طلایی!

فرض کنید قراره کلاسی درست کنیم به اسم koolac! (یه اسم دلبخواه است! و ما به علت تعصب روی کولاک، همچین اسمی رو انتخاب کردیم!!)

هر شی (object) این کلاس، دو تا ویژگی داره! یکی x و یکی دیگه y! (که این طول و عرض نقطه است! یعنی همون x و y نقطه!)

حالا این کلاس، دو تا متد داره!

متد اولش میاد نقطه رو میندازه توی معادله ax+b !

متد دومش میاد نقطه رو میندازه توی معادله درجه دوم ax^2+b !

و این همچین قابلیتی هم داره که خود کاربر x و y و a و b رو وارد کنه! قطعاً مثال جذابی خواهد شد! پس بریم باهم کدنویسی این رو شروع کنیم!

کد نویسی مثال طلایی!

قطعه کد زیر رو در نظر بگیرید تا باهم روووش صحبت کنیم!

class koolac():
    def __init__(self,X,Y):
        self.x=X
        self.y=Y
    def fit_daraje_1(self,a,b):
        print(a*self.x+b)
    def fit_daraje_2(self,a,b):
        print(a*self.x**2+b)
model=koolac(2,5)
model.fit_daraje_1(1,1)
model.fit_daraje_2(1,1)

در خط 1 که گفتیم کلاسی به اسم koolac درست کن!

تابع یا متد خوف و خفنِ __init___ در پایتون (python)

در خط 2، از تابع خوف و خفن __init__ استفاده کردیم! شوخی میکنم فقط قیافش خوف و خفنه! وگرنه خودش چیز خاصی نیست! اولاً بدونید این تابع، به طور پیش‌فرض در پایتون تعریف شده! یعنی این اسمی نبوده که ما خودمون انتخاب کنیم! این متدی است که خود python برای کلاس ها داره!

حالا این تابع چیکار میکنه؟!

هیچی! کارش اینه که وقتی یک شی جدید از کارخونه میاد بیرون! [اگه یادتون باشه، این تعبیری بود که در آموزش جلسه پیش داشتیم!] میره سراغش! و سوال پیچش میکنه و ازش اطلاعات میگیره!

مثلاً در این مثال ما، به محض اینکه شی یا object از کارخونه میاد بیرون! میره میگه سلام self ! لطفاً بگو X اِت چیست؟! Y اِت چیست؟!

شاید بگید چرا گفت: «سلام self»؟! مگر هر شی یک اسم نداره؟! چرا اسمش رو صدا نزد! چون این بنده خدا اگر قرار باشه اسم همه رو بدونه و حفظ کنه که پیر میشه که!!! [این جنبه شوخیش!]

جمله قصار به سبک پایتون (python): اما در حالت کلی وقتی توی این کارخونه بخوان بگن: شی فلان (یا شی نوعی!) میگن self !

شاید به جرأت بتونم بگم مفهوم self همین بود! و از اینجا به بعد توی مثال ها و خط های بعدی این کد، توضیح بیشتر میدیم تا همین جمله بهتر فهمیده بشه! ولی جمله قصار بالا مفهوم کلی self است!

و آخرین مورد در مورد __init__ اینکه init مخفف initialize است! که برای مقداردهی اولیه و کارهای اولیه بعد از ایجاد شی بکار میره!

بریم سراغ توضیح ادامه کد خودمون!

پس در خط 2، به محض ایجاد هر شی یا object، جناب آقایِ __init___ میره سراغ شیِ فلان (self) و میگه X و Y حضرت عالی چیست! و بعد که X و Y اون شی فلان (self) رو پرسید!

میاد یک ویژگی براش تعریف میکنه به اسم x (حرف کوچیک نوشتم! به این توجه کنید!) و یک ویژگی دیگه به اسم y (این هم حرف کوچیکه!)

پس در خط 3 میگه: این شیِ فلان (self) یه ویژگی به اسم x داره که برابر است با هموون X که موقع پرسیدن ازش گرفتیم! [توجه کنید که این اسامی اختیاری اند! یعنی می‌شد بجای x نوشت Sajjad! ولی خب چون نوشتن همچین اسمی نامأنوس بود، ما از این کارها نکردیم!]

در خط 4 هم میگیم: واسه همون شیِ فلان (self) ویژگی به اسم y تعریف کن که برابر است با همون Y که موقع پرسیدن ازش گرفتیم!

این بود تمام اطلاعات اولیه که آقای __init__ لطف کرد و گرفت!

حالا در ادامه دو تا تابع داریم تعریف می‌کنیم!

تابع یا متد اول به اسم fit_daraje_1  که میاد اون معادله درجه اول ax+b رو برازش میده! (fit میکنه!) [به زبووون خودمون: یعنی همون نقاط رو میندازه توی همچین معادله‌ای!]

تابع یا متد دوم با اسم fit_daraje_2 میاد تابع درجه دوم ax^2+b رو fit میکنه! (برازش میده به x و y)!

توضیح تابع یا متد fit_daraje_1

در خط 5 و 6 این تابع رو تعریف کردیم! این تابع دوتا ورودی هم از کاربر میگیره! به اسم a و b ! (که ضرایب همون معادلات است!)

و میاد چاپ میکنه: مقدار ax+b رو! همین! (که a و b رو که همین الان از کاربر گرفت! x رو هم موقع ایجاد شی، آقای __init__ زحمتش رو کشید!)

و توجه کنید که ننوشتیم x نوشتیم، self.x ! چون اگه بگیم x، سوال پیش میاد که x چه کسی؟! کدوووم شی؟! پس باید بگیم self.x که بگیم x اوون شیِ فلان! که حالا بعداً می‌بینید که چجوری اون شی رو بهش می‌فهمووونیم!

توضیح تابع یا متد fit_daraje_2

این تابع رو در خط 7و 8 تعریفش کردیم!

این هم دوتا ورودی میگیره و معادله ax^2+b رو میسازه! و مشابه تابع اول، مقدارش رو چاپ میکنه!

 

خب تا اینجا کلاس رو تعریف کردیم! یه چیزی هم که یه عده میگن رو هم این پاییین می‌نویسم:!

هر تابع (متد) در کلاس (class) مولفه اولش self است!

حالا بریم سراغ پیاده سازی این کلاس!

پیاده سازی و ساخت شی از کلاس!

خط 9: حالا قراره یک شی از این کارخونه درست کنیم به اسم model ! (اسم من Sajjad است! اسم ایشون model ! هرکسی یه اسمی داره دیگه! ولی اسمش هم دلبخواهه! میتونستم اسمش رو Sajjad هم بذارم! اصلاً به عنوان تمرین شما اسمش رو بذارید Sajjad !)

این model از کارخونه koolac با دو X و Y به ترتیب با مقدار 2 و 5 میره پیش آقای __init__ تا مقدارش رو ثبت کنه! پس الان x این شی 2 و y این شی 5 است!

در خط 10، میگیم از همین شی با نام model بیا متد fit_daraje_1 رو فراخوانی کن و به a و b ای که این متد لازم داره مقدارهای 1 و 1 رو بده!

پس این تابع میاد مقدار زیر رو چاپ میکنه!

a*x+b=1*(2)+1=3

حالا در خط 11، میایم از شیِ model متد fit_daraje_2 رو فراخوانی میکنیم! و اون a و b رو هم 1 و 1 میدیم! پس مقدار زیر رو چاپ خواهد کرد!

a*x^2+b=1*(2)^2+1=5

اگر این کد رو اجرا کنید، می‌بینید که واقعاً همین مقادیر 3 و 5 رو نشون میده!

این مبحث از پایتون (python) واقعاً آسوون نبود! ولی سعی کردم به بهترین شکل آموزشش بدم، اگر سوالی داشتید، بازهم در خدمتیم!

تعداد نظرات در انتظار تایید: 12
  1. محمد گفت:

    سلام. خیلی خیلی ممنون برای آموزش فوق العاده. میشه خواهش کنم در مورد وراثت و متد super هم توضیح بدید؟

    1. گروه آموزشی کولاک گفت:

      سلام مجدد،
      به زودی یک دوره خیلی خوب توی سایت میذاریم که همه این نکات و حتی موارد پیشرفته‌تر داخلش گنجونده شده

  2. amirmohammad گفت:

    واقعا عالی بود دستتون درد نکنه
    تشکر میکنم از وبسایت کولاک و آقای سجاد رحمانی!
    موفق باشید

    1. گروه آموزشی کولاک گفت:

      سلام، ممنون از شما و اینکه وقت گذاشتید و نظر دادید
      ما هم از شما کاربر عزیر تشکر میکنیم

  3. محمد گفت:

    خیلی عالی
    من یه سوالی داشتم
    راستش دوتا سوالD:
    اولیش اینکه فرق def با class چیه؟
    دومیش هم اینکه چطوری یک پروژه دیگری رو وارد پروژه خودم کنم؟
    یعنی چطور فراخوانیش کنم؟

    1. گروه آموزشی کولاک گفت:

      سلام، خیلی ممنون از شما و اینکه لطف کردید ونظر گذاشتید
      1- فرق def و class که خیلی طولانی است خداوکیلی! نمیشه در قالب یک کامنت توضیح داد! ولی مثلاً فرض کنید میخوایم یک رگرسیون خطی با پایتون بنویسیم! اگر با تابع بنویسیم و بخوایم اینو برای چند مدل استفاده کنیم (برای چند داده!) رسماً دهنمووون سرویس میشه! اما کلاس خیلی خوبه و باعث میشه این برای مدل‌های مختلف به سادگی تمام قابل استفاده باشه! یا همچنین یه سری چیزها مثل ارث بری و از اینجور جنگولک بازی‌ها رو کلاس داره (در صورتی که تابع نداره!)
      2- با دستور import

  4. fateme گفت:

    سلام ، خدا قوت
    ممنون از آموزشهای عالیتون، من کلاس پایتون رو شروع کردم اما واقعا یه چیزایی تو این آموزشهای شما دیدم که تو کلاس بیان نشده بود با اینکه زمان کلاس بیشتره و با حل تمرین برای هر بخش تلاش میشه به بهترین شکل پیش بره…
    انشاالله که ادامه پیدا کنه آموزش هاتون 🙂

    1. گروه آموزشی کولاک گفت:

      سلام و عرض ادب
      ممنون از شما
      خیلی انرژی بخش و امیدوارم کننده بود
      ممنون که وقت گذاشتید و نظر دادید
      قطعاً ادامه میدیم
      و الان هم کلی مطلب هر چند وقت یکبار قرار میدیم
      همین الان که دارم اینو مینویسم در سه روز گذشته، دو مطلب داخل سایت قرار دادیم

  5. ghazal گفت:

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

    1. گروه آموزشی کولاک گفت:

      سلام و عرض ادب،
      واقعاً خیلی خیلی خوشحال شدم
      شاید یه موقع‌های خسته میشیم واقعاً
      ولی تنها منبع انرژی‌مون همین نظرات کاربرها است
      واقعاً ممنون از اینکه لطف کردید و نظر گذاشتید
      یه دنیا ممنون

  6. p.r گفت:

    سلام
    بی نهایت ممنون از زحمات زیادی که کشیده اید و هر مبحث را بطور کامل و مفصل آموزش داده اید که وافعا جای تقدیر فراوان دارد. من تمام مراحل را گام به گام با آموزش های عالییی شما پیش آمدم. سوال من این هست که ادامه مباحث را باید خریداری کرد یا در سایت خوبتون قرار میدهید؟ سپاس فراوان از زحمات شما

    1. گروه آموزشی کولاک گفت:

      سلام، ممنون از شما که لطف کردید و برامون نظر گذاشتید
      هرچند ما دوره آموزشی هم داریم
      ولی در وبسایتمون هم قطعاً مطلب میذاریم [کما اینکه تا الان این همه مطلب گذاشتیم]
      بعد از اینکه لیست آموزش پایتون (که مطمئن هستم اونجا رو مشاهده کردید) تموم کردید، برید در دسته بندی پایتون، یه عالمه دیگه هم آموزش وجود داره! فقط مثل اون مطلب دسته بندی نشده! ولی واقعاً خیلی خیلی زیادن!
      و یه بخشی هم بهمون حق بدید! ما هنوز قدمت زیادی نداریم و طول میکشه تا بهتر بشیم!
      ممنون از نظرتون

  7. ali گفت:

    سلام نحوه اموزش خیلی خوبه ولی مثال یخورده سخته .

    1. گروه آموزشی کولاک گفت:

      سلام، ممنون از شما، باور کنید خود مبحث هم سخته
      اما واقعاً اگر بتونید یک مثال خوب معرفی بکیند، قطعاً خیلی خوب میشه و ان شاء الله بهبود بدیم تا سایر دوستان راحت تر باشن
      ممنون از اینکه لطف کردید، وقت گذاشتید و نظر دادید

  8. narges گفت:

    سلام
    ممنون از بیان شیوا.
    لطفا با همین سبک آموزش ادامه دهید. خیلی خوب بیان می کنید.
    ممنون

    1. گروه آموزشی کولاک گفت:

      سلام، ممنون از شما که وقت گذاشتید و نظر دادید
      خیلی ممنون

  9. مهران گفت:

    خیلی عالی بود دستتون درد نکنه

    1. گروه آموزشی کولاک گفت:

      خیلی ممنون، سلامت باشین
      ممنون که لطف کردید، وقت گذاشتید و نظر دادید

  10. Karim گفت:

    داداش ایولله دمت گرم شیر فهمم کردی

    1. گروه آموزشی کولاک گفت:

      قربان شما، ممنون که لطف کردید نظر دادید

  11. Sam گفت:

    حقیقتا عالی بود.
    بدون هیچ حرف اضافه و نقالی کردن یه راست اصل مطلب رو آموزش دادید.
    بسیار لذت بردم ممنون از شما.

    1. گروه آموزشی کولاک گفت:

      قربان شما، سلامت باشید
      ممنون از اینکه وقت گذاشتید و لطف کردید و نظر گذاشتید

  12. هانیه گفت:

    ممنون از زمان و همتتان برای اموزش این بخش????????

    در متون آموزشی ، زیادی شوخی و جملات طنز و دو پهلو ذهن یادگیرنده را مداوم از مسیر اصلی به بیرون پرت میکند. در متن بالا (که در صورت حذف جملات طنز میتوانست حجم کمتری داشته باشد و زودتر عمل یادگیری به پایان برسد) تکرار طنز فرد را از ادامه یادگیری منصرف میکند. زیراکه مداوم باید به دنبال سر رشته اصلی بحث بگردد.

    1. گروه آموزشی کولاک گفت:

      سلام و عرض ادب،
      این مطلب به جرات یکی از بد فهم ترین مطالب پایتون بوده!
      هرچند به عنوان مخاطب نظر شما کاملاً محترمه و من قطعاً استفاده میکنم
      اما احساس میکنم شاید این طنز و شوخی وسط توضیح، باعث بشه هم خستگی کم بشه و هم درک مطلب بهتر بشه
      به نظرم شاید این طنر و شوخی وسطش یکم به فهم مطلب بیشتر کمک کنه
      و عموم مخاطبان هم از این نوع نگارش راضی بودن، اما حرف شما هم به عنوان یکی از مخاطبان کولاک، محترم و ارزشمنده قطعاً

  13. Erfan گفت:

    سلام آموزش هاتون هم مثل اسم سایتتون کولاکه !!

    1. گروه آموزشی کولاک گفت:

      سلام، ممنون از شما، لطف دارید
      دم شما گرم

  14. سعید گفت:

    سلام ممننون بابت سایتتون
    در این مثال از y کجای معادله استفاده شده؟ درواقع مقدار y در جواب معادلات هیچ تاثیری نداره چون عملا اصلا y نیست تو معادله

    1. گروه آموزشی کولاک گفت:

      سلام، تشکر بابت اینکه لطف کردید و وقت گذاشتید و برامون نظر نوشتید
      در مورد سوالتون: بله درسته! فقط از x استفاده کردیم! ولی خب چون نقطه میخواستیم تعریف کنیم، برای همین هم x و y نقطه رو در نظر گرفتیم! ولی حرف شما که میگید در متدها استفاده نکردیم، کاملاً درسته!

  15. ehsan گفت:

    خیلی عالی بود
    ممنون

    1. گروه آموزشی کولاک گفت:

      سلام، خواهش میکنم، قربان شما
      تشکر از شما که نظر دادید

  16. فاطمه گفت:

    سلام خسته نباشید
    من واقعا برای امتحانمون نگران بودم چون خیلی با class مشکل داشتم ولی الان یه ذره خیالم راحت شد
    واقـعا ممنــونم ازتــــون 🙂

    1. گروه آموزشی کولاک گفت:

      سلام، ممنون از شما
      خدا رو شکر که راضی بودید،
      و ممنون بابت اینکه لطف کردید و وقت گذاشتید و برامون نظر نوشتید، خیلی خیلی ممنون

  17. Nasser گفت:

    damet garm aqa sajad ,ale tozih dadi

    1. گروه آموزشی کولاک گفت:

      سلام، خواهش می‌کنم، قربان شما
      ممنون که لطف کردید و نظر گذاشتید، خیلی ممنون

  18. سارا گفت:

    واقعا عالی بود
    خیلی ممنون میشم اگر حل معادلات خطی و غیر خطی و معادلات دیفرانسیل با پایتون رو هم توضیح بدید.

    1. گروه آموزشی کولاک گفت:

      سلام و عرض ادب،
      ممنون که وقت گذاشتید و برای ما نظر نوشتید
      ممنون از لطفتون
      در مورد درخواستتون برای مطلب، باید یکم توضیح بدم
      ببینید ما در حال حاضر نوپا حساب می‌شیم و هنوز توان این رو نداریم که مطالب زیادی بذاریم [به علت اینکه محدودیت وقت داریم و عموماً کار اصلیمون این نیست و طبیعتاً درگیری‌های خاص خودمون رو داریم و کمتر وقت میشه]
      و از یک سرف حساب کنید که برای وبسایت باید اوایل کار مطالبی رو بنویسیم که مخاطب بیشتری داره و شمول بیشتری داره
      بازهم ببخشید، شرمندم

  19. فرهنگ گفت:

    سلام، ممنون بابت مطالب خوب سایتتون…
    چطور میتونم با آقای رحمانی ملاقاتی داشته باشم؟

    1. گروه آموزشی کولاک گفت:

      سلام و وقت بخیر،
      خیلی ممنون که لطف کردید نظر دادید
      شدیداً ممنون
      لطفاً در تلگرام به آیدی زیر پیام بدید:
      @Koolac_Admin

  20. PokerFaCe گفت:

    سلام خسته نباشید.. واقعا این سبک آموزش خیلی ناب و عالیه! لطفا همینجور ادامه بدید:).
    امیدوارم تو این زمینه موفق باشید
    درود فراوان برشما از ایران خودمونD:

    1. گروه آموزشی کولاک گفت:

      سلام و وقت بخیر متقابل از ایران خودمونD:،
      خیلی ممنون که لطف کردید و وقت گذاشتید و برامون نظر نوشتید
      قطعاً خیلی امید بخشه
      ممنون از لطفتون

  21. علیرضا گفت:

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

    1. گروه آموزشی کولاک گفت:

      سلام و عرض ادب، خیلی ممنون از لطفتون؛ محبت دارید
      تشکر از شما که لطف کردید و وقت گذاشتید و برامون نظر گذاشتید

  22. Amin گفت:

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

    1. گروه آموزشی کولاک گفت:

      سلام امین جان،
      خیلی ممنون که لطف کردید نظر گذاشتید
      واقعاً دلگرم کننده بود برامووون
      حقیقتاً زحمت خیلی زیادی برای تک تک آموزش های پایتون این سایت کشیدیم، ولی با این نظرات، وافعاً خوشحال میشیم
      ممنون از شما که وقت گذاشتید و نظرتون رو انتقال دادید

  23. سید جواد گفت:

    خیلی عالی بود. ممنون.

    1. گروه آموزشی کولاک گفت:

      سلام، خواهش میکنم، ممنون از اینکه وقت گذاشتید و برامون نظر گذاشتید

  24. نرگس گفت:

    خیلی جذاب و مفید آموزش دادید.
    تشکر

    1. گروه آموزشی کولاک گفت:

      خواهش میکنم، تشکر از شما

  25. Mansoor گفت:

    آفرین.بسیار شیواوزیبا بیان کردید.درود بیکران از تایوان بر شما

    1. گروه آموزشی کولاک گفت:

      سلام و عرض ادب،
      ممنون از لطفتون، خیلی ممنون!

آموزش پایتون (فیلم و جزوه و تمرین)آموزش کامل زبان برنامه نویسی پایتون + جزوه و تمرین
آموزش پایتون (فیلم + جزوه + تمرین)کلیک کنید