جاري التحميل...

تركيب الكائنات

اللون blue ملك للقلم وحده، أما الحقيبة فلا تفعل سوى أن تحمل هذا القلم. لذلك فالفئة Bag ليست فئة فرعية من Pen. ولا تُثبَّت في هذا البرنامج أي حزمة، ولا يُنشأ أي مجلد.

قلم داخل حقيبة

python
class Pen:
    def __init__(self, color):
        self.color = color

class Bag:
    def __init__(self, pen):
        self.pen = pen

pen = Pen("blue")
bag = Bag(pen)
print(bag.pen.color)

أنت تبني القلم أولًا بالسطر Pen("blue")، ثم تضعه في الحقيبة بالسطر Bag(pen). أما السطر class Bag فلا يملأ الحقيبة، بل يصف شكلها فقط. الذي يملؤها هو Bag(pen)، وعند هذه اللحظة بالذات يعمل init الخاص بالفئة Bag ويكون self هو الحقيبة.

عند تنفيذ print(bag.pen.color) لا يجد البرنامج في الحقيبة لونًا خاصًا بها، فيذهب إلى القلم الذي تحمله. ولذلك تكتب print كلمة واحدة فقط هي blue. والتعبير bag.pen ليس قلمًا ثانيًا، بل هو القلم نفسه الذي بنيته، ومن ثَمّ يعطي pen.color وbag.pen.color الكلمة نفسها. ولا يظهر badge في أولها، ولا يُكتب الرقم 4، ولا يوجد سطر ثانٍ.

📊 ماذا يعني كل تعبير

التعبير معناه
pen القلم الذي بنيته، وهو يحتفظ بـ blue
bag.pen هذا القلم نفسه وهو داخل الحقيبة
bag.pen.color الكلمة blue

هناك سطران غير موجودين في البرنامج، ولو كُتبا لتوقف البرنامج. إذا قرأتَ bag.color فسيتوقف بخطأ اسمه AttributeError، لأن الحقيبة لا تخزّن أي لون؛ ولن يُكتب None، ولن يكمل البرنامج. وكذلك Bag("blue"): الكلمة المجردة ليست قلمًا وليس لها color، فقراءة .color منها تتوقف أيضًا بالخطأ AttributeError.

القلم داخل الحقيبة

يبقى blue عند القلم، والحقيبة تحمله فقط، ويصل bag.pen.color إلى هذه الكلمة عن طريقه. لا تكتب class Bag(Pen)، فهذه الصيغة تصنع فئة فرعية، أما هنا فالقلم موجود داخل الحقيبة. وفي الصفحة التالية فئة بيانات، أي فئة وظيفتها الأساسية حفظ القيم؛ أما هذه الصفحة فتكتفي بوضع القلم في الحقيبة وقراءة blue من خلالها.

🧠 اختبر معرفتك

جاهز للبدء

اختبر معرفتك

تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع

❓
6
الأسئلة
🎯
70%
للنجاح
♾️
∞
الوقت
🔄
∞
المحاولات

📝 التعليمات

  • اقرأ كل سؤال بعناية
  • اختر أفضل إجابة لكل سؤال
  • يمكنك إعادة الاختبار عدة مرات كما تريد
  • سيتم عرض تقدمك في الأعلى