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()
إنشاء المثيلات باستخدام __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()) |
سمات المثيل مقابل سمات الصنف
السمات المعروضة حتى الآن كانت سمات المثيل. سمة المثيل هي مُتغيِّر فريد لكل مثيل من صنف ويتم الوصول إليه باستخدام التنسيق instance_name.attribute_name. نوع آخر من السمات، وهو سمة الصنف، ينتمي إلى الصنف ويُشارك بين جميع مثيلات الصنف. وتُستخدم الصيغة class_name.attribute_name.
مفاهيم تطبيقية
المثيلات وسمات الصنف
تأمل المثال أعلاه.
جرّب بنفسك
إنشاء صنف لتذاكر طيران شركة خطوط جوية
اكتب صنفًا، 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