7.2 استيراد الأسماء
أهداف التعلم
في نهاية هذا القسم، ينبغي أن تكون قادرًا على
- استيراد الدوال من وَحدة باستخدام الكلمة المفتاحية
from. - شرح كيفية تجنب تعارض الأسماء عند استيراد وَحدة.
الكلمة المفتاحية from
يمكن استيراد دوال محددة من وَحدة باستخدام الكلمة المفتاحية from:
from area import triangle, cylinder
يمكن استدعاء هذه الدوال مباشرة، دون الإشارة إلى الوَحدة:
print(triangle(1, 2))
print(cylinder(3, 4))
استكشاف إضافي
كما هو موضح أدناه، يمكن أن تؤدي الكلمة المفتاحية from إلى أسماء مربكة.
مفاهيم تطبيقية
الكلمة المفتاحية from
تعارض الأسماء
قد تستخدم الوَحدات التي يكتبها مبرمجون مختلفون نفس الاسم لدالّة. يحدث تعارض الأسماء (name collision) عندما تُعرّف دالّة عدة مرات. إذا عُرِّفت دالّة أكثر من مرة، يُستخدَم التعريف الأحدث:
from area import cube
def cube(x): # تعارض أسماء (يستبدل الدالّة المستوردة)
return x ** 3
print(cube(2)) # تستدعي دالّة cube() المحلية، وليس area.cube()
قد لا يدرك المبرمج أن الدالّة cube مُعرّفة مرتين لأنه لا يحدث خطأ عند تشغيل البرنامج. لا تُعتبر تعارضات الأسماء أخطاءً وغالبًا ما تؤدي إلى سلوك غير متوقع.
يجب توخي الحذر لتجنب تعارض الأسماء. استيراد دوال محددة من وَحدة يقلّل من استهلاك الذاكرة؛ لكن استيراد الوَحدة كاملةً يساعد في تجنب التعارضات لأنه يُستخدَم تنسيق module.name. هذه مفاضلة يجب على المبرمج أخذها في الاعتبار.
مفاهيم تطبيقية
تعارض الأسماء
استكشاف إضافي
إذا تم تعريف اسم أو استيراده أو إسناده عدة مرات، فإن بايثون تستخدم التعريف الأحدث. تسمح لغات أخرى بتعدد الدوال التي تحمل نفس الاسم إذا كانت المُعامِلات مختلفة. هذه الميزة، المعروفة باسم التحميل الزائد للدوال (function overloading)، ليست جزءًا من لغة بايثون.
جرّب بنفسك
استيرادات مفقودة
أضف تعليمات الاستيراد المفقودة إلى أعلى الملف. لا تُجرِ أي تغييرات على بقية الشِفرة. في النهاية، يجب أن يعمل البرنامج بدون أخطاء.
جرّب بنفسك
هدايا الحفلات
البرنامج التالي لا يعمل بشكل صحيح بسبب تعارض الأسماء. أصلح البرنامج عن طريق تعديل تعليمات الاستيراد، واستدعاءات الدوال، وإسنادات المُتغيِّرات. يجب أن يكون الإخراج كالتالي:
Bouncy ball area: 13
Bouncy ball volume: 4
Cone hat area: 227
Cone hat volume: 209