<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های iman bhlool</title><link>https://virgool.ir/feed/@ibhlool7</link><description></description><language>fa</language><pubDate>2026-11-12 08:06:06</pubDate><image><url>https://files.virgool.ir/upload/users/112270/avatar/LktMGc.png</url><title>iman bhlool</title><link>https://virgool.ir/@ibhlool7</link></image><item><title>در اعماق خلق اشیا (پایتون)</title><link>https://virgool.ir/@ibhlool7/در-اعماق-خلق-اشیا-پایتون-mc38vokzjtyu</link><description>یه چند وقتی بود نیاز داشتم یکم بیشتر پایتونو موشکافی کنم! توی کارم تا به حال مشکل حل نشدنی ای به وجود نیامده بود ولی یه عطشی از قدیم توی من وجود داشت که همیشه به دلایل مختلف از جمله نبودن وقت کافی، سرکوبش میکردم. ولی روزی که سری به یک پروژه open-source برای مطالعه قسمتی از کدش زدم دیگه خودمو کامل قانع کردم که این سفر به اعماق رو شروع کنم.برای این سفر هم دنبال یک همسفر بودم که در نهایت به کتاب Python Unlocked رسیدم، شاید تا اینجا محتوا این کتاب زیاد به کارم نیاد (تاکید میکنم تا اینجای کتاب!) ولی فصل یک مطالب جالبی درباره اشیا داشت که سعی میکنم خلاصه ای از یه بخششو همون طوری که خودم برداشت کردم براتون بنویسم. photo by Kristijan Arsov / unsplash&#xA;خلق اشیادر پایتون مراحلی برای ایجاد اشیا طی می شود که سعی میکنم با مثال توضیحشون بدم.فرض کنید که با یک کلاس با نام C با ساختار زیر داریم :ما برای اینکه بتوانیم مراحل ساخت اشیا این کلاس (و فراتر!) را داشته باشیم نیازه که یک metaclass برای کلاس بالا ایجاد و بهش معرفی کنم. خب بخش جذابش ازینجا شروع میشه!!! وقتی شما شروع به ساختن یک شی از کلاس مذکور میکنید :c = C(&#39;iman&#39;)مفسر پایتون میره سراغ متاکلاس و تابع __call__ اون رو صدا میزنه و C رو به عنوان کلاسی که باید ازش شی ساخته شود و بقیه پارامتر ها را به آن پاس میده. چی شد!؟با یکم تغییر در کلاس متا به ساختار زیر میرسیم :با اجرای دستور زیر خروجی رو مشاهده می کنید:&gt;&gt;&gt; c =C(&#39;iman&#39;)(&lt;class &#39;__main__.C&#39;&gt;, &#39;iman&#39;)همین طور که بالاتر گفته شد، وقتی که ما یک کلاس رو صدا میزنیم، پایتون خود کلاس و پارامتراشو میده به کلاس متا تا برای ما یک شی ایجاد کنه ولی این داستان ادامه داره !الان ما هستیم و یک کلاس و یه سری پارامتر، پس متا باید تلاش کنه یک شی رو برای ما تولید کنه، پس میاد یه سری به کلاس ما میزنه تا ببینه یک magic method خاصی که دلش میخواد توی کلاس تعریف شده یا نه! پس با دستورات زیر یه نگاهی به کلاس میندازه :همون طور که مشخصه متا میره دنبال رویه ای که کاربر توی کلاسش برای ایجاد شی جدید تعریف کرده که اون متد __new__ هست، اگه پیداش کرد، اجراش میکنه و یه شی ازش میگیره در غیر این صورت باید else ای در کار باشه که در ادامه اضافه شده است :یعنی اگر نتونست چیزی پیدا کنه به ناچار میره از جدش کمک میگیره و یک شی برای ما میسازه! ما الان یک شی داریم ولی چه بلایی سر بقیه پارامتر ها میاد؟ ما معمولا از بقیه پارامتر ها برای مقدار دهی اولیه استفاده میکنیم لذا کلید در دستان __init__ هست ! و تامام تامام !اگر این مطلب براتون مفید بود، خوشحال میشم به اشتراک بزارید تا بقیه هم استفاده کنند.</description><category>iman bhlool</category><author>iman bhlool</author><pubDate>Sun, 29 Dec 2019 00:23:52 +0330</pubDate></item></channel></rss>