آموزش init در پایتون با مثال – به زبان ساده
از متد init در پایتون به عنوان سازنده کلاس استفاده میکنیم. هر وقت که شیئی از روی کلاس ساخته میشود، این متد به صورت خودکار فراخوانی شده و صفات اصلی آن شیء را مقداردهی میکند. در واقع با کمک متد init میتوانیم وضعیت اولیه نمونههای کلاس را در لحظه ساخت مشخص کنیم. با کمک این متد حتی میتوان عملیات خاصی را درست در لحظه ساخته شدن اشیاء اجرا کرد. شیءگرایی در پایتون یکی از ویژگیهای پیشرفته این زبان برنامه نویسی است. برای کسب مهارت در کار با تکنولوژی شیءگرایی باید با مفاهیمی مانند متد init، وراثت و غیره آشنا باشیم.
- متوجه میشوید که چرا به متد init سازنده گفته میشود و عملکرد آن چیست.
- با سینتکس متد init آشنا شده و روش نوشتن آن را یاد میگیرید.
- با بررسی چند مثال مختلف استفاده از init را در کلاسهای پایتون و همراه با ارثبری میآموزید.
- با انواع سازنده init آشنا شده و روش نوشتن و کاربرد آنها را میآموزید.
- روش استفاده از متد init را در پلیمورفیسم یاد میگیرید.
- میبینید که چطور ویژگیهای کلاس والد از طریق init به فرزند به ارث میرسند.


در این مطلب از مجله فرادرس با متد init در پایتون آشنا میشویم. ابتدا این متد را به شکل سادهای تعریف کرده و سپس روش کار آن را توضیح میدهیم. بعد از آن، سینتکس متد init را همراه با چند مثال ساده بررسی میکنیم. در ادامه مطلب هم انواع سازنده و کاربردهای این متد را توضیح خواهیم داد.
init در پایتون چیست؟
init در پایتون یکی از متدهای ویژه است. به این متد، «سازنده» (Constructor) هم گفته میشود. هر بار نمونهای از روی کلاسهای پایتون میسازیم، متد init به صورت خودکار فراخوانی میشود. با کمک متد init میتوانیم صفات و متغیرهای اشیا را مقداردهی بکنیم.
با کمک مثال سادهای در کادر پایین، روش استفاده از init را نمایش دادهایم.
بعد از اجرای کدهای بالا، خروجی پایین در کنسول پایتون نمایش داده میشود.
Name: John
Age: 25روش کار متد init در پایتون چیست؟
متد init در پایتون در داخل کلاسها تعریف میشود. این متد برای مقداردهی اولیه به ویژگیهای اشیا به کار میرود. هر شیء دارای صفات مختص به خود است. به محض ساخته شدن اشیاء صفات آنها نیز باید مقدار بگیرند. برای مقداردهی به این صفات از init استفاده میکنیم.
در زمان تعریف متد init باید آن را به شکل __ init __(self) بنویسیم. در این سینتکس به غیر از خود عبارت init سه ویژگی دیگر هم وجو دارند.
- عبارت self
- Underscore-های دوگانه __ در دو طرف کلمه init
- پارامترهای init - که بعد از self نوشته میشوند.
تا این جای مطلب با متد init در پایتون آشنا شده و کاربرد آن را به شکل مختصری یاد گرفتید. در ادامه مهمترین اجزای این متد را توضیح داده و با کمک چند مثال روشهای استفاده از آن را هم بررسی کردهایم. در صورتی که به مطالعه این نوع مطالب علاقه دارید، پیشنهاد میکنیم اپلیکیشن مجله فرادرس را نصب کنید.
برای نصب اپلیکیشن رایگان مجله فرادرس، کلیک کنید.
در ادامه این بخش، تمام نکات فهرست بالا را توضیح دادهایم.
عبارت self
پارامتر self همیشه باید به عنوان آرگومان پیشفرض برای این متد تعریف شود. این عبارت نشان دهنده آن است که متد init به شیء ساخته شده توسط همین کلاس اشاره میکند. البته این کار را میتوان برای تمام متدهای تعریف شده در کلاس انجام داد. نوشتن پارامتر self یعنی اینکه این متد هر مقداری بگیرد یا هر عملیاتی انجام بدهد فقط مختص به همین شیء ساخته شده از روی کلاس است. در واقع عبارت self مانند نام موقتی برای اشیاء عمل میکند.
Underscore-های دوگانه __
به متد init بعضی از اوقات «init با خط زیر» (Double Underscore Init) یا «داندر اینیت» (Dunder Init) هم میگویند. این به خاطر آن است که در زمان تعریف متد init دو خط زیر هم در دو طرف آن مینویسیم. وجود دو خط زیر در دو طرف نام به معنای این است که متد مورد نظر جزو متدهای ویژه است. خطوط Underscore دوگانه، نشان دهنده آن هستند که پایتون از متد مورد نظر به صورت خودکار و در داخل خودش استفاده میکند.
بنابراین در زمان ساخت اشیا لازم نیست برنامه نویس به شکل مستقیم متد init را فراخوانی کند. پایتون این کار را به صورت خودکار انجام میدهد. اجرای خودکار متدهای سازنده یکی از بخشهای مهم کار پایتون است. متد init به پایتون کمک میکند که بدون توجه به نوع برنامه، به راحتی اشیا را ساخته و راهاندازی کند.

پارامترهای init
در زمان نوشتن کلاس، تعریف پارامتر برای متد init اختیاری است. یعنی اینکه میتوانیم هر تعداد پارامتر که خواستیم به آن اختصاص بدهیم یا آن را فقط با پارامتر self تعریف کنیم. حتی میتوان بعضی از پارامترها را با مقدارهای پیشفرض برای متد init تعریف کرد. در بخشهای بعد انواع روش اختصاص پارامتر به متد init را توضیح دادهایم.
پایتون از قابلیت «سربارگذاری سازنده» (Constructor Overloading) پشتیبانی نمیکند. اما با کمک آرگومانهای تعریف شده در سازندهها میتوان از پلی مورفیسم در پایتون استفاده کرد. در بخشهای بعد این مسئله را با کمک مثال سادهای بررسی کردهایم.
چگونه از فرادرس برای یادگیری پایتون کمک بگیریم؟
فرادرس مجموعهای از فیلمهای آموزشی را درباره پایتون تولید کرده است. استفاده از این فیلمها، روش بسیار خوبی برای یادگیری پایتون است. زیرا با کمک بهترین اساتید و پیشرفتهترین روشها جدیدترین تکنیکهای برنامه نویسی را آموزش میدهند. با مشاهده منظم و تمرین همراه با فیلمها مهارتهای مختلف پایتون را بدست میآورید. یادگیری این زبان، گزینهای مناسب برای افراد علاقهمند به اشتغال در حوزه برنامه نویسی است. موقعیتهای شغلی متنوعی برای برنامه نویسان پایتون وجود دارد.

گروه آموزشی فرادرس در زمینه تولید فیلمهای آموزشی چندین سال تجربه موفق داشته است. این فیلمهای حوزههای بسیار متنوعی را پوشش میدهند. افراد زیادی با کمک فیلمهای فرادرس موفق شدند که به مهارتهای مورد نیاز خود دست پیدا کنند و در موقعیت شغلی مورد نظر خود مشغول شوند. شما هم با تماشای فیلمهای مربوط به حوزه مورد علاقه خود و تمرین مطالب تدریس شده میتوانید مهارت مورد نیاز خود را بدست بیاورید.
در پایین، چند مورد از فیلمهای آموزشی سطح مبتدی تا پیشرفته پایتون را معرفی کردهایم.
- فیلم آموزش رایگان پایتون، برنامه نویسی سریع و آسان در ۱۴۰ دقیقه + گواهینامه
- فیلم آموزش رایگان کتابخانه Datetime در پایتون برای مدیریت زمان + گواهینامه
- فیلم آموزش مقدماتی کار با پایگاه های داده در Python + گواهینامه
- فیلم آموزش کاربرد «چت جی پی تی» (ChatGPT) در برنامه نویسی پایتون، دوره مقدماتی + گواهینامه
- فیلم آموزش برنامه نویسی پایتون، دوره تکمیلی، بخش یکم
در ادامه مطلب، ابتدا سینتکس متد init را تعریف کردهایم. بعد از آن هم چند مثال مختلف را بررسی میکنیم.
سینتکس و مثالهای init در پایتون
با استفاده از سینتکس زیر به راحتی میتوانیم سازنده init را در کلاسهای پایتون تعریف کنیم.
در کادر زیر و به کمک زبان پایتون، کلاسی با نام Teacher نوشتهایم. با توجه به آن بهتر میتوانید عملکرد متد init را درک کنید.
بعد از اجرای کدهای بالا، خروجی پایین در کنسول پایتون نمایش داده میشود.
Mostafa Rashidi teaches Computer Scienceدر این کد، کلاس Teacher دو صفت زیر را به تمام اشیا خود میدهد.
- name: از این صفت برای اختصاص دادن نام به اشیا این کلاس، استفاده میشود.
- Subject: از این صفت هم برای مشخص کردن رشته تدریس، استفاده میشود.
توجه کنید که نام و رشته تدریس هر معلم منحصر به فرد است و این اطلاعات با هم اشتباه گرفته نمیشوند.
در سناریو بعدی میخواهیم با کمک متد init از «چند ریختی» (Polymorphism) استفاده کنیم. برای انجام این کار میتوانیم سینتکس نوشته شده در پایین را به کار ببریم.
در کدهای بالا، آرگومانهای نوشته شده در متغیر args* نوع مقداردهی اولیه پارامترها را مشخص میکنند. برای کمک به شفافتر شدن موضوع مثال مناسبی را در کادر پایین، نوشتهایم. در صورتی که نسبت به کلمه کلیدی *args ناآشنا هستید، پیشنهاد میکنیم که مطلب مربوط به آن را در مجله فرادرس مطالعه بکنید.
بعد از اجرای کدهای بالا، خروجی پایین در کنسول پایتون نمایش داده میشود.
Name of the teacher is Mostafa Rashidi
Mostafa Rashidi teaches Computer Science
Strength of the class is 32انواع سازنده init
در زبان برنامه نویسی پایتون میتوان سازنده init را با سه نوع اصلی تعریف کرد.
- سازنده init پیشفرض
- سازنده init با پارامترهای سفارشی
- سازنده init با پارامترهای پیشفرض

برای درک این بخش، بهتر است با برنامه نویسی شیءگرا در پایتون آشنایی داشته باشیم. در صورت نیاز به کمک، پیشنهاد میکنیم که فیلم آموزش برنامه نویسی شی گرا در پایتون را از فرادرس مشاهده بکنید. به منظور کمک به مخاطبان مجله، لینک دسترسی به این فیلم را در پایین نیز قرار دادهایم.
در ادامه این قسمت از مطلب، تمام موارد فهرست بالا را توضیح دادهایم.
سازنده init پیشفرض
«سازنده init پیشفرض» (Default __init__ Constructor) در پایتون به متدی میگویند که هیچ پارامتری به آن داده نشده است. عبارت self تنها پارامتر این سازنده است که به صورت الزامی نوشته میشود. self مرجعی برای اشاره به اشیاء ساخته شده از آن کلاس است.

در کادر پایین، سینتکس مورد استفاده برای تعریف سازنده init پیشفرض را نوشتهایم.
در کادر زیر هم سینتکس مورد استفاده برای ساخت شیء از روی کلاسی را نوشتهایم که از سازنده init پیشفرض استفاده میکند.
برای کمک به درک بهتر موضوع، کلاس دلخواهی را با نوع سازنده init پیشفرض تعریف کردیم. سپس از روی این کلاس شیئی ساختیم. در نهایت هم متد ساخته شده در این شیء را اجرا کردیم.
بعد از اجرای کدهای بالا، خروجی زیر در کنسول پایتون نمایش داده میشود.
Sum is 83در کادر بالا کلاس Defult تعریف شده است. هنگام ساخت اشیا این کلاس نمیتوانیم ویژگی خاصی به آنها اختصاص بدهیم. اما خود پایتون به صورت خودکار دو ویژگی var1 و var2 را اختصاص میدهد. این ویژگیها مقادیر ثابت و غیرقابل تغییری دارند. با جرای متد .add() بر روی اشیا این کلاس نتیجه ثابت sum is 83 نمایش داده میشود. فرقی نمیکند چه تعداد شیء و در چه قسمتهایی از برنامه از روی این کلاس بسازیم. همیشه نتیجه ثابت است.
سازنده init با پارامترهای سفارشی
هر وقت بخواهیم چند آرگومان به سازنده کلاس ارسال کنیم باید از «سازنده init با پارامترهای سفارشی» (Parameterised __init__ Constructor) کمک بگیریم. این نوع از init بعد از عبارت کلیدی self به تعداد مورد نیاز، پارامتر دریافت میکند. در پایین، سینتکس تعریف سازنده init با پارامترهای سفارشی را نوشتهایم.
برای ساخت شیء از روی کلاسی که با این نوع سازنده init تعریف شده باید به روش زیر عمل کنیم.
به منظور کمک به درک بهتر موضوع، مثال سادهای را در کادر پایین پیادهسازی کردهایم.
بعد از اجرای کدهای بالا، خروجی پایین در کنسول پایتون نمایش داده میشود.
Sum is 257در کدهای بالا را در فهرست پایین توضیح دادهایم.
- در این برنامه کلاس Defult را تعریف کردیم.
- در زمان نوشتن متد init بعد از کلمه کلیدی self دو پارامتر n1 و n2 را نیز نوشتهایم.
- از این پارامترهای برای مقداردهی به متغیرهای var1 و var2 استفاد میکنیم.
- در خط ۹ و ۱۰ هم متد .add() را نوشتهایم. وظیفه این متد جمع مقداری ورودی و چاپ نتیجه در خروجی است.
- در خط بعدی شیئی به نام obj با مقادیر دلخواه 121 و 136 ساختهایم.
- با فراخوانی متد .add() حاصل جمع این دو عدد در خروجی نمایش داده میشود.

با کمک این کلاس میتوانیم حاصل جمع هر جفت عدد دلخواهی را بدست بیاوریم. برای این کار فقط کافی است که شیئی از روی کلاس ساخته و اعداد مورد نظر را به عنوان پارامتر به آن ارسال کنیم. سپس متد .add() را فراخوانی میکنیم.
متد init با پارامترهای پیشفرض
همین طور که میدانید در زمان تعریف توابع پایتون میتوان مقادیر پیشفرضی را به عنوان آرگومان به آنها ارسال کرد. این اصل در مورد سازندهها و متدهای کلاسها هم برقرار است. البته این ویژگی تقریبا در بیشتر زبانهای برنامه نویسی پرکاربرد وجود دارد. متد init هم شامل این موضوع میشود. برای اینکه کاربر یا برنامه مجبور نباشد برای تعریف هر شیء به کلاس مقدار ارسال کند، میتوانیم مقادیری را به عنوان پیشفرض برای آرگومانهای آن تعریف کنیم.
در کادر پایین، سینتکس مورد استفاده برای ارسال مقادیر پیشفرض به متد init را نوشتهایم.
به منظور کمک به شفافتر شدن موضوع، مثال سادهای از مقداردهی اولیه به پارامترهای متد init را پیادهسازی کردهایم.
بعد از اجرای کدهای بالا، خروجی پایین در کنسول پایتون نمایش داده میشود.
Mostafa Rashidi is the name of the teacher.
Ehsan Salehi is the name of the teacher.تمام کدهای برنامه بالا را خطبهخط در فهرست پایین توضیح دادهایم.
- در مثال بالا کلاس Teacher را تعریف کردیم.
- در داخل این کلاس و در بخش تعریف متد init - خط ۳ - برای ویژگی name مقدار پیشفرض Mostafa Rashidi رانوشتهایم.
- در خطوط ۶ و ۷ با تعریف متد show(self): دستوری را برای نمایش نام معلم نوشتهایم.
- در خطوط ۹ و ۱۰ اشیاء t1 و t2 را تعریف کردهایم. شیء t1 بدون تخصیص مقدار تعریف شده است. اما به شیء t2 عبارت Ehsan Salehi را ارسال کردهایم.
- در انتها - خطوط ۱۱ و ۱۲ - متد show(self): را برای هر دو شیء فراخوانی کردیم.
کاربرد متد init در وراثت
همین طور که در بخشهای بالا توضیح داده و در مثالها بررسی کردیم، از متد init برای مقداردهی به صفات اشیا استفاده میکنیم. در این قسمت از مطلب، میخواهیم با عملکرد متد init در زمان وراثت آشنا شویم.
وراثت به کلاس فرزند اجازه میدهد از متد init کلاس والد خود استفاده کند. به غیر از ویژگیهای متد init کلاس والد، کلاس فرزند با کمک وراثت سایر توابع و اعضای دادهای آن را نیز به ارث میبرد.

متد init کلاس والد در داخل متد init کلاس فرزند فراخوانی میشود. شاید کلاس والد به آرگومان خاصی نیاز داشته باشد. در این صورت هنگام ساخت نمونهای از کلاس فرزند نیز باید آن مقدار ارسال بشود. هر وقت شیئی از کلاس فرزند ساخته بشود تمام ویژگیهای کلاس والد خود را به ارث میبرد. پس باید برای تمام پارامترهای کلاس والد هم مقدار مشخصی را اختصاص داد. مگر آنکه این پارامترها به صورت پیشفرض دارای مقدار باشند.
بعد از اجرای کدهای بالا، خروجی پایین در کنسول پایتون نمایش داده میشود.
Initialising the name attribute
Age attribute of base class is initialised
Name of the teacher is Allen Park
Age of the teacher is 45با توجه به خروجی کد بالا میتوانیم ترتیب فراخوانی و اجرای سازندههای init را تشخیص بدهیم. شیء t سازنده کلاس Teacher را فراخوانی میکند. با این کار، ابتدا سازنده کلاس Person برنامه را کنترل میکند. بعد از آن که کار متد init از کلاس Person به پایان میرسد. کنترل جریان برنامه دوباره به دست سازنده کلاس Teacher میافتد. این سازنده هم باید کار خود را به پایان برساند تا در نهایت شیء مورد نظر ساخته شود.
کسب مهارتهای واقعی با انجام پروژههای واقعی
برای کسب مهارتهای کاربردی باید در پیادهسازی پروژههای مورد نیاز دنیای واقعی تمرین کنیم. فرادرس، مجموعه آموزشی اختصاصی به همین منظور تهیه کرده است. در این مجموعه آموزش، پروژههای بسیار پیشرفتهای متناسب با نیاز روز بازار کار پیادهسازی شدهاند. در نتیجه مفاهیم حرفهای با اجرای پروژههای واقعی آموزش داده میشوند. در هر کدام از این فیلمهای آموزشی، مفاهیم، تکنولوژیها و کتابخانههای متنوعی به کار برده شدهاند. با بررسی این آموزشها مهارتهای برنامه نویسی خود را به مقدار چشمگیری افزایش میدهید.
در پایین، چند فیلم آموزشی از این مجموعه را معرفی کردهایم.
- فیلم آموزش مقدماتی ساخت ربات تلگرام با پایتون
- فیلم آموزش ساخت دستیار هوشمند با Ollama و پروتکل MCP، اجرای پروژه عملی LLM + گواهینامه
- فیلم آموزش پروژه محور پایتون، کار با Tkinter و SQLite3 در Python + گواهینامه
- فیلم آموزش پیادهسازی ربات معامله گر با مدل SVM در پایتون
- فیلم آموزش مدیریت موجودی انبار در پایتون، اجرای پروژه اپلیکیشن گرافیکی سیستم انبارداری
در صورت تمایل با کلیک بر روی تصویر زیر به صفحه اصلی این مجموعه آموزشی هدایت شده و از فیلمهای پروژهمحور بیشتری دیدن کنید.

جمعبندی
در این مطلب از مجله فرادرس با متد init در پایتون آشنا شدهایم. init یکی از متدهای رزرو شده برای تعریف کلاس در پایتون است. از همان اول این متد با هدف انجام کار به عنوان سازنده طراحی شده است. به عبارت سادهتر متد init در پایتون برای مقداردهی اولیه به تمام صفات اشیاء به کار برده میشود. هر وقت پایتون اقدام به ساخت نمونهای از کلاسها میکند متد init به صورت خودکار فراخوانی میشود. به ازای هر نمونه ساخته شده از روی کلاس متد init هم یکبار فراخوانی میشود.
متد init پیشفرض، متد init با پارامتر و متد init با پارامترهای دارای مقدار پیشفرض، سه روش مختلف تعریف متد init هستند. برنامه نویسان میتوانند از هر سه نوع در زمان تعریف کلاس استفاده کنند. نوشتن کلمه کلیدی self به عنوان پارامتر برای تمام توابع عضو کلاس الزامی است. بنابراین متد init هم باید این پارامتر را دریافت کند. این پارامتر به هر کدام از اشیاء ساخته شده از کلاس به صورت منحصر به فرد اشاره میکند.












