معامل self
جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 4 من 64.
يشير المعامل self إلى مثيل class داخل methods. فهو يتيح لك الوصول إلى attributes الكائن الحالي وتعديلها.
إليك مثال على فئة (class) تحتوي على دوال (methods) تستخدم self:
class Car:
def honk(self):
print("Beep beep!")
def describe(self):
print(f"I am a {self.color} {self.model}")يجب أن يكون المعامل self دائمًا هو المعامل الأول في تعريفات الدوال (methods). فهو يخبر الدالة بأي كائن محدد يتم استخدامه.
قم بإنشاء كائن سيارة وأضف سمات:
my_car = Car()
my_car.color = "Red"
my_car.model = "Sedan"الآن قم باستدعاء الدوال:
my_car.honk()
my_car.describe()المخرجات:
Beep beep!
I am a Red Sedanلاحظ أنه عند استدعاء my_car.describe()، لا تقوم بتمرير أي شيء لـ self - بايثون تمرر تلقائياً my_car كبارامتر self.
إليك ما يحدث خلف الكواليس:
# عندما تكتب هذا:
my_car.describe()
# يقوم Python فعلياً بهذا:
Car.describe(my_car)يسمح معامل self لكل كائن بالوصول إلى بياناته الخاصة. فبدون self، لن تعرف الدوال (methods) أي سمات كائن يجب استخدامها.
نقطة هامة: قم دائمًا بتضمين self كمعامل أول في تعريفات الدوال (methods)، ولكن لا تقم بتمريره أبدًا عند استدعاء الدوال - بايثون تتعامل مع هذا تلقائيًا.
التحدي
سهلأكمل فئة Car في ملف car.py عن طريق إضافة تابع (method) يسمى display_info يستخدم معامل self لطباعة سنة السيارة، والشركة المصنعة، والطراز بالتنسيق التالي:
"This car is a [year] [make] [model]".
car.py: يحتوي على تعريف فئةCarحيث ستضيف تابعdisplay_infodriver.py: ملف التنفيذ الرئيسي الذي يستورد ويستخدم فئةCar
سيقوم ملف driver.py باستيراد فئة Car الخاصة بك وإنشاء كائنات (instances) لاختبار تنفيذك. تأكد من أن التابع الخاص بك يعمل بشكل صحيح عند استدعائه من ملف driver.
ورقة مرجعية
يشير المعامل self إلى مثيل الفئة (class) داخل الأساليب (methods) ويسمح لك بالوصول إلى سمات الكائن الحالي وتعديلها.
يجب أن يكون self دائماً هو المعامل الأول في تعريفات الأساليب:
class Car:
def honk(self):
print("Beep beep!")
def describe(self):
print(f"I am a {self.color} {self.model}")قم بإنشاء كائن وإضافة سمات:
my_car = Car()
my_car.color = "Red"
my_car.model = "Sedan"استدعاء الأساليب (يقوم بايثون تلقائياً بتمرير الكائن كـ self):
my_car.honk() # Beep beep!
my_car.describe() # I am a Red Sedanنقطة رئيسية: قم دائماً بتضمين self كمعامل أول في تعريفات الأساليب، ولكن لا تقم بتمريره أبداً عند استدعاء الأساليب.
جرّب بنفسك
from car import Car
# اختبر الكود الخاص بك
my_car = Car()
my_car.year = 2020
my_car.make = "Toyota"
my_car.model = "Corolla"
my_car.display_info() # يجب أن يطبع: This car is a 2020 Toyota Corollaيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsمعامل selfMethodsAttributesدالة البناء (__init__)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةدالة ()superإعادة تعريف الدوال (Method Overriding)الوراثة المتعددةترتيب استدعاء الدوال (Method Resolution Order)مراجعة - هيكلية الموظفين5تعدد الأشكال
مراجعة إعادة تعريف الدوالمفهوم Duck Typingالأصناف والدوال المجردةتصميم الواجهاتملخص - حاسبة الأشكال