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

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: metaclass in python  (دفعات بازدید: 1782 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین amin-asa

  • Full Member
  • *
  • ارسال: 161
  • جنسیت : پسر
metaclass in python
« : 04 آذر 1391، 10:21 ب‌ظ »
سلام دوستان

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

با تشکر
* زندگی خالی نیست *
* مهربانی هست، سیب هست، ایمان هست *
* آری تا شقایق هست، زندگی باید کرد *

آفلاین سید مسعود امامیان

  • Hero Member
  • *
  • ارسال: 951
پاسخ : metaclass in python
« پاسخ #1 : 04 آذر 1391، 10:33 ب‌ظ »
 از این لینک استفاده کنید.
به عمل کار برآید     به سخندانی نیست . . .

آفلاین amin-asa

  • Full Member
  • *
  • ارسال: 161
  • جنسیت : پسر
پاسخ : metaclass in python
« پاسخ #2 : 04 آذر 1391، 10:55 ب‌ظ »
لینک خوبی بود ممنون
اما همشو نفهمیدم چرا؟
خجالت می کشم بگم! انگلیسیم ضعیفه  ](*,)

اگر زحمت بکشید کمی از این مطالب رو توضیح بدید بهتر متا کلاس رو می فهمم.
* زندگی خالی نیست *
* مهربانی هست، سیب هست، ایمان هست *
* آری تا شقایق هست، زندگی باید کرد *

آفلاین amin-asa

  • Full Member
  • *
  • ارسال: 161
  • جنسیت : پسر
پاسخ : metaclass in python
« پاسخ #3 : 09 آذر 1391، 08:00 ق‌ظ »
کسی نبود در مورد متاکلاسها یه کمکی کنه.
* زندگی خالی نیست *
* مهربانی هست، سیب هست، ایمان هست *
* آری تا شقایق هست، زندگی باید کرد *

آفلاین AmirrezaGhaderi

  • Jr. Member
  • *
  • ارسال: 90
  • جنسیت : پسر
    • حساب تویتر من
پاسخ : metaclass in python
« پاسخ #4 : 09 آذر 1391، 02:31 ب‌ظ »
لینکی که دوستمون smemamian معرفی کرد بهترین منبعی هست که ممکنه به دردت بخوره.
اگه همش رو متوجه نشدی مطمئن باش فقط به خاطر ضعف انگلیسی نبوده، قسمتیش هم به خاطر
اینه که متوجه شدن metaclass ها کلا آسون نیست، حتی برای کسی که زبانش انگلیسی باشه! فکر هم نکنم
کسی بتونه کاملا این مبحث رو به درستی در زبان دیگه ایی توضیح بده.

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

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

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

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

در پایان، نکته ای هست که باید بهش توجه کنید: این چنین قابلیت هایی برای خود توسعه دهنده های پایتون در زبان
قرار داده شده تا کار توسعه ی پایتون رو راحت تر کنه. نه برای برنامه نویس های معمولی که بشینن باهاشون بازی کنن  ;D
اصولا در ۹۹.۹۹۹۹۹۹۹۹۹۹۹ درصد اوقات به همچنین قابلیت هایی نیازی پیدا نمی کنید. اما دونستن درباره اون ها ضرری نداره  ;)
« آخرین ویرایش: 09 آذر 1391، 02:34 ب‌ظ توسط AmirrezaGhaderi »