تقنية

ModuleSpec في بايثون: هل origin يضيف __file__؟

origin label.py مع علم False لا يضيف __file__ للوحدة
العلم غير مفعّل. [1] [2]

ميّز وصف المصدر من تهيئة سمات الوحدة. [1] [2]

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

لا؛ origin وحده لا يفعّل has_location في إنشائنا المباشر. [1] [2]

  • مواصفة غير حزمة بـloader=None ومصدر label.py. [1] [2]
  • العلم False؛ الوحدة الأولى بلا __file__. [1] [2]
  • بعد تفعيل العلم، الوحدة الجديدة تعرض label.py. [1] [2]
  • الأولى تبقى بلا السمة؛ لا تحديث تلقائي. [1] [2]
  • ضبط تعليمي في 3.12.14؛ لم ننفذ ملف المثال. [1] [2]

المثال

import importlib.machinery as m
import importlib.util as u
s=m.ModuleSpec("bud",None,
 origin="label.py")
a=u.module_from_spec(s)
print(s.has_location)
print(hasattr(a,"__file__"))
s.has_location=True
b=u.module_from_spec(s)
print(b.__file__)

[1] [2]

شرط التهيئة

المصدر يبدأ العلم بـFalse، ويضبط __file__ عند إنشاء الوحدة إذا فُعّل. المخرجات False، False، label.py؛ لا يكفي الاسم النصي وحده. [1] [2]

تفعيل علم الموقع يضيف اسم الملف للوحدة الجديدة فقط
تهيئة جديدة. [1] [2]

البيانات ليست استيرادًا

المواصفة مشتركة، لكن تغيير العلم لا يعيد تهيئة الوحدة الأولى. شغّلنا المقارنة بمجلد فارغ؛ السمة الناتجة اسم، ولا تثبت وجود ملف أو تنفيذ شيفرته. [1] [2]

المراجع

  1. Python 3.12: ModuleSpec and module creation
  2. CPython 3.12.14: module attribute initialization
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

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

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