الأصناف والمثيلات

11.2 الأصناف والمثيلات

أهداف التعلم

في نهاية هذا القسم، ينبغي أن تكون قادرًا على

  • إنشاء صنف بسمات المثيل، وسمات الصنف، والتابع __init__().
  • استخدام تعريف الصنف لإنشاء مثيلات الصنف لتمثيل الكائنات.

الأصناف والمثيلات

في القسم السابق، نُمذج كيان من العالم الحقيقي، مثل ملف تعريف شخص على وسائل التواصل الاجتماعي، ككائن واحد. كيف يمكن للمُبرمج تطوير نظام برمجي يدير ملايين ملفات التعريف؟ سيكون المخطط الذي يحدد حقول وإجراءات ملف التعريف أمرًا حاسمًا.

في برنامج بايثون، يحدد صنف نوعًا من الكائنات بسمات (حقول) وتوابع (إجراءات). والصنف مخطط لإنشاء الكائنات. تُسمى الكائنات الفردية المُنشأة من نوع الصنف مثيلات.

نقطة تحقق

تمثيل طلب قهوة باستخدام صنف

مفاهيم تطبيقية

الأصناف والمثيلات

تأمل المثال أدناه:

    class Cat:
      def __init__(self):
        self.name = 'Kitty'
        self.breed = 'domestic short hair'
        self.age = 1
      def print_info(self):
        print(self.name, 'is a ', self.age, 'yr old', self.breed)
    
    pet_1 = Cat()
    pet_2 = Cat()
1.
ما اسم الصنف؟
  1. Cat
  2. class Cat
  3. self
2.
أي مما يلي يمثل مثيلًا من الصنف Cat؟
  1. __init__
  2. name
  3. pet_1
3.
أي مما يلي يمثل سمة؟
  1. breed
  2. pet_2
  3. print_info
4.
لنفترض أن المُبرمج أراد تغيير الصنف ليمثل قطًا أليفًا. ما هو الاسم المناسب الذي يتبع توصيات PEP 8؟
  1. petcat
  2. pet_cat
  3. PetCat

إنشاء المثيلات باستخدام __init__()

__init__() تابع خاص يُستدعى في كل مرة يُنشأ فيها مثيل جديد من الصنف. تشير الكلمة المفتاحية self إلى مثيل من الصنف وتُستخدم في توابع الصنف للوصول إلى المثيل بعينه الذي استدعى التابع. يستخدم __init__() self لتعريف وتهيئة سمات المثيل.

نقطة تحقق

إنشاء طلبات قهوة متعددة وتغيير السمات

مفاهيم تطبيقية

المثيلات و __init__()

تأمل المثال أدناه:

1
class Rectangle:
2
  def __init__(self):
3
    self.length = 1
4
    self.width = 1
5
  def area(self):
6
    return self.length * self.width
7
8
room_1 = Rectangle()
9
room_1.length = 10
10
room_1.width = 15
11
print("Room 1's area:", room_1.area())
12
room_3 = Rectangle()
13
room_3.length = 12
14
room_3.width = 14
15
print("Room 3's area:", room_3.area())
5.
كم مرة يتم استدعاء __init__()؟
  1. 1
  2. 2
  3. 3
6.
عندما يُنفّذ السطر 11، ينتقل سير التنفيذ إلى السطر 5. ماذا يمثل self في السطر 5؟
  1. مساحة room_1
  2. المثيل room_1
  3. الصنف Rectangle
7.
أي سطر يهيئ سمة المثيل length؟
  1. 3
  2. 6
  3. 9
8.
لنفترض أن السطر 2 تم تغييره إلى def __init__():. ما هي القيم التي ستُهيّأ بها سمات room_1؟
  1. length = 0, width = 0
  2. length = 1, width = 1
  3. Error

سمات المثيل مقابل سمات الصنف

السمات المعروضة حتى الآن كانت سمات المثيل. سمة المثيل هي مُتغيِّر فريد لكل مثيل من صنف ويتم الوصول إليه باستخدام التنسيق instance_name.attribute_name. نوع آخر من السمات، وهو سمة الصنف، ينتمي إلى الصنف ويُشارك بين جميع مثيلات الصنف. وتُستخدم الصيغة class_name.attribute_name.

نقطة تحقق

استخدام سمات الصنف لمعلومات طلب القهوة المشتركة

مفاهيم تطبيقية

المثيلات وسمات الصنف

تأمل المثال أعلاه.

9.
أي مما يلي يمثل سمة مثيل؟
  1. loc
  2. order_id
  3. order_3
10.
لنفترض أن السطر order_1.cup_size = 8 أُضيف قبل order_3.print_order(). ما هو الإخراج الجديد؟
  1. Cafe Coffee Order 3 : 8 oz
  2. Cafe Coffee Order 3 : 16 oz
  3. Error
11.
لنفترض أن السطر CoffeeOrder.loc = 'Caffeine Cafe' أُضيف قبل order_3.print_order(). ما هو الإخراج الجديد؟
  1. Caffeine Cafe Order 3 : 16 oz
  2. Cafe Coffee Order 3 : 16 oz
  3. Error
12.
لنفترض أن السطر self.cls_id = 5 أُضيف إلى نهاية تعريف __init__(). ما هو الإخراج الجديد؟
  1. Cafe Coffee Order 5 : 16 oz
  2. Cafe Coffee Order 3 : 16 oz
  3. Error

جرّب بنفسك

إنشاء صنف لتذاكر طيران شركة خطوط جوية

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

سمات المثيل:

  • رقم الرحلة: 1
  • المطار: JFK
  • البوابة: T1-1
  • الوقت: 8:00
  • المقعد: 1A
  • الراكب: unknown

سمات الصنف:

  • شركة الطيران: Oceanic Airlines
  • رمز شركة الطيران: OA

التابع:

  • __init__(): يهيئ سمات المثيل
  • print_info(): يطبع معلومات التذكرة (مُقدّمة في القالب)

الإدخال المُعطى:

    2121
    KEF
    D22B
    11:45
    12B
    Jules Laurent

الإخراج هو:

    Passenger Jules Laurent departs on flight # 2121 at 11:45 from KEF D22B in seat 12B

جرّب بنفسك

إنشاء صنف لكتب الخيال

اكتب صنفًا، Book، كما هو موضح أدناه. ثم أنشئ مثيلين وعيّن لكل سمة مثيل قيمًا مقروءة من الإدخال.

سمات المثيل:

  • العنوان: ''
  • المؤلف: ''
  • السنة: 0
  • الصفحات: 0

سمة الصنف:

  • دار النشر: Fantasy Tomes

التابع:

  • __init__(): يهيئ سمات المثيل
  • print_info(): يطبع معلومات الكتاب (مُقدّمة في القالب)

الإدخال المُعطى:

    Lord of the Bracelets
    Blake R. R. Brown
    1999
    423
    A Match of Thrones
    Terry R. R. Thomas
    2020
    761

الإخراج هو:

    Lord of the Bracelets by Blake R. R. Brown published by Fantasy Tomes
    in 1999 with 423 pages
    A Match of Thrones by Terry R. R. Thomas published by Fantasy Tomes
    in 2020 with 761 pages