الكلمة المفتاحية super
جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 16 من 65.
عندما يحتاج الطفل إلى بيانات إضافية، يكتب دالة _init() الخاصة به. عندها لا يعود مُنشئ الصنف الأب يُنفَّذ تلقائيًا. استدعِه باستخدام super()، مع تمرير الوسيطات التي يتوقعها الصنف الأب:
# animal.gd
class_name Animal
extends RefCounted
var animal_name: String
func _init(n: String) -> void:
animal_name = n
print("Animal created: ", n)# dog.gd
class_name Dog
extends Animal
var breed: String
func _init(n: String, b: String) -> void:
super(n)
breed = b
print("Dog breed set: ", b)var buddy := Dog.new("Buddy", "Beagle")
print(buddy.animal_name, " the ", buddy.breed)Animal created: Buddy
Dog breed set: Beagle
Buddy the Beagleمن دون سطر super(n)، يظل البرنامج يعمل، لكن يتم تخطي مُنشئ Animal: لا شيء يعيّن animal_name، لذا تظل سلسلة نصية فارغة. ضع super() أولًا، لكي تكون متغيرات الأصل جاهزة قبل أن يستخدمها الابن.
في أي طريقة أخرى، تُشغّل super() إصدار الأب من الطريقة التي أنت فيها. يحتفظ الابن بنتيجة الأب ويضيف إليها:
# animal.gd
func describe() -> String:
return "I am " + animal_name# dog.gd
func describe() -> String:
return super() + ", a " + breedvar rex := Dog.new("Rex", "Husky")
print(rex.describe())Animal created: Rex
Dog breed set: Husky
I am Rex, a Huskyلاستدعاء طريقة مختلفة من الصنف الأب، اكتب اسمها بعد نقطة: تعمل super.describe() من أي طريقة في Dog.
التحدي
سهلاكتب صنفًا Person وصنفًا Employee يرث منه.
- يخزّن
Personكلاً منperson_nameوageفي المُنشئ. تُعيدintroduce()القيمةHi, I'm NAME and I'm AGE years old. - يضيف
Employeeالخاصيةjob. يمرّر مُنشئه الاسم والعمر إلىsuper()ويخزّن الوظيفة. تُعيدintroduce()فيه نتيجةintroduce()للصنف الأب، متبوعةً بـ. I work as a JOB.
يقرأ الكود المزوّد عدد الأشخاص الذين سيتبعون، ثم سطرًا لكل شخص: person NAME AGE أو employee NAME AGE JOB. ويطبع introduce() لكل منهم. بالنسبة إلى person Alice 30 وemployee Bob 35 Developer، تكون المخرجات:
Hi, I'm Alice and I'm 30 years old
Hi, I'm Bob and I'm 35 years old. I work as a Developerضع الكود في person.gd وemployee.gd. يحتوي main.gd على كود الإدخال/الإخراج المزوّد، ولا يمكن تعديله.
جرّب بنفسك
extends Node
func _ready():
# كود الإدخال/الإخراج الموفَّر: اتركه كما هو
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
if parts[0] == "employee":
var employee := Employee.new(parts[1], int(parts[2]), parts[3])
print(employee.introduce())
else:
var person := Person.new(parts[1], int(parts[2]))
print(person.introduce())
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجّه
1أساسيات البرمجة كائنية التوجه
الملفات الخارجيةمقدمة إلى البرمجة كائنية التوجهالفئات مقابل الكائناتالكلمة المفتاحية selfالأساليبالخصائصالمُنشئ (_init)مراجعة - آلة حاسبة بسيطة4تعدد الأشكال
إعادة النظر في تجاوز الأساليبكتابة الأنواع بأسلوب البطةالفئات والأساليب المجرّدةتصميم الواجهاتمراجعة - حاسبة الأشكال10أنماط التصميم، الجزء الثاني
نمط الأوامرنمط المحوّلنمط المُزيّننمط الطريقة القالبيةنمط الحالةالنمط المركّب2خصائص الأصناف
متغيرات الكائن مقابل المتغيرات الساكنةالدوال الساكنةمُعيِّنات الخصائصمُسترجِعات الخصائصخاص وفقًا للاتفاقيةمراجعة - مدير الحسابات البنكية5التغليف
الأعضاء العامة والخاصةالتحقق من الصحة باستخدام دوال الضبطإخفاء المعلوماتالخصائص للقراءة فقطمراجعة - نظام سجلات الطلاب8مفاهيم متقدمة في البرمجة كائنية التوجه
التركيب مقابل الوراثةالأصناف الداخليةالعُقد كمكوّناتRefCounted مقابل Nodeالتعدادات في الأصناف3الوراثة
الوراثة الأساسيةالكلمة المفتاحية superإعادة تعريف الأساليبسلاسل الوراثةالتحقق من الأنواع باستخدام isمراجعة - التسلسل الهرمي للموظفينتدرّب بنفسك: مترجم GDScript عبر الإنترنت