تقنية

new_class في بايثون: هل الكائن المعطى يبقى قاعدة فعلية؟

البديل Base قاعدة فعلية
البديل. [1] [2]

القاعدة المعطاة قد تستبدل قبل إنشاء الفئة. [1] [2]

الخلاصة السريعة

الكائن marker يستبدل بـBase، مع حفظ الأصل في __orig_bases__. [1] [2]

  • مررنا نسخة Marker، وليست فئة. [1] [2]
  • طريقتها __mro_entries__ تعيد (Base,). [1] [2]
  • القواعد الفعلية لـMade هي (Base,). [1] [2]
  • القاعدة الأصلية تحفظ هوية marker. [1] [2]
  • اختبرنا 3.12.14 وفئات عادية. [1] [2]

المثال

from types import new_class
class Base: pass
class Marker:
    def __mro_entries__(self,bases):
        return (Base,)
marker=Marker()
Made=new_class('Made',(marker,))
print(Made.__bases__==(Base,))
print(Made.__orig_bases__[0]
    is marker)

[1] [2]

أصل وبديل

المصدر هنا يحل القواعد أولًا ثم ينشئ الفئة. المخرجان True وTrue: الأول يفحص القواعد الفعلية، والثاني البيانات الأصلية. حفظ الكائن لا يجعله جزءًا من وراثة Made. [1] [2]

هوية marker في القواعد الأصلية
الأصل. [1] [2]

النطاق

المثال لطريقة مؤلفة تعيد صفًا بفئة واحدة. لا ننفذ فحص أنواع عام، ولا نختبر أصنافًا ميتا مخصصة أو نبني حكمًا على كل وسائط الأنواع. [1] [2]

المراجع

  1. Python 3.12: new_class and resolve_bases
  2. CPython 3.12.14: types.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.