انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: amin-asa در 04 آذر 1391، 10:21 ب‌ظ

عنوان: metaclass in python
ارسال شده توسط: amin-asa در 04 آذر 1391، 10:21 ب‌ظ
سلام دوستان

متاکلاس چه نوع کلاس هایی هستند?
و چطور می توان انها رو تعریف کرد؟
لطفا همراه با توضیح یه مثال هم بزنید.

با تشکر
عنوان: پاسخ : metaclass in python
ارسال شده توسط: سید مسعود امامیان در 04 آذر 1391، 10:33 ب‌ظ
 از این لینک (http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python) استفاده کنید.
عنوان: پاسخ : metaclass in python
ارسال شده توسط: amin-asa در 04 آذر 1391، 10:55 ب‌ظ
لینک خوبی بود ممنون
اما همشو نفهمیدم چرا؟
خجالت می کشم بگم! انگلیسیم ضعیفه  ](*,)

اگر زحمت بکشید کمی از این مطالب رو توضیح بدید بهتر متا کلاس رو می فهمم.
عنوان: پاسخ : metaclass in python
ارسال شده توسط: amin-asa در 09 آذر 1391، 08:00 ق‌ظ
کسی نبود در مورد متاکلاسها یه کمکی کنه.
عنوان: پاسخ : metaclass in python
ارسال شده توسط: AmirrezaGhaderi در 09 آذر 1391، 02:31 ب‌ظ
لینکی که دوستمون smemamian معرفی کرد بهترین منبعی هست که ممکنه به دردت بخوره.
اگه همش رو متوجه نشدی مطمئن باش فقط به خاطر ضعف انگلیسی نبوده، قسمتیش هم به خاطر
اینه که متوجه شدن metaclass ها کلا آسون نیست، حتی برای کسی که زبانش انگلیسی باشه! فکر هم نکنم
کسی بتونه کاملا این مبحث رو به درستی در زبان دیگه ایی توضیح بده.

کلا مبحث metaprogramming به واسطه‌ی زبان Lisp معروف شد؛ metaprogramming امکاناتی در اختیارتون
قرار میده که به واسطه‌ی اون می تونید زبان برنامه نویسی خودتون رو برنامه نویسی کنید!!

اگه شما امکاناتی شبیه این رو داشته باشید، شاید لازم نباشه تمام تغییراتی که قراره در زبان اعمال
کنید رو به کدهای سطح پایین بسپرید. ممکنه قادر باشید که این تغییرات رو به کمک metaprogramming در
 خود زبان اعمال کنید.

برای مثال اگه در Lisp شما ساختار For ندارید، دنیا به آخر نرسیده، خودتون می تونید ساختار For
رو به زبان اضافه کنید!!! نیازی نیست مثل زبان های دیگه منتظر بمونید تا توسعه دهنده‌های زبان چنین
چیزی رو به کامپایلر یا مفسر اضافه کنن. البته اصولا مقایسه‌ی هر زبان دیگه ایی با Lisp در این زمینه
بیشتر شبیه جوک میمونه!

metaclass ها هم کمی از قابلیت های metaprogramming رو در پایتون در اختیار شما قرار میدن. اگه به اون
لینک دقت کنید، گفته شده که metaclass‌ ها به قابلیت هایی اشاره میکنن که به واسطه ی اون می تونید ساختار
class ها و نحوه‌ی کارشون رو تغییر بدید. مثلا فرض کن یه متدی در یک کلاس وجود داره، اما می تونید کاری کنید
که اگه کدی درخواست اون متد رو کرد، کلاس بهش بگه آقاجون ما همچنین متدی رو نداریم، برو بعدا بیا!!! در حالی
که رفتار طبیعی یک class اینه که اون متد رو اجرا کنه.

در پایان، نکته ای هست که باید بهش توجه کنید: این چنین قابلیت هایی برای خود توسعه دهنده های پایتون در زبان
قرار داده شده تا کار توسعه ی پایتون رو راحت تر کنه. نه برای برنامه نویس های معمولی که بشینن باهاشون بازی کنن  ;D
اصولا در ۹۹.۹۹۹۹۹۹۹۹۹۹۹ درصد اوقات به همچنین قابلیت هایی نیازی پیدا نمی کنید. اما دونستن درباره اون ها ضرری نداره  ;)