دورة تطوير بايثون المتقدمة
الفصل
>
المستوى
الكلاسات المتقدمة
الدالة الخارقة
الهدف
جمع اللحوم المختلفة ثم طهيها وتقديمها بطرق مختلفة عن طريق إنشاء كائنات باستخدام الدوال الفائقة.
يحتوي الثلاجة على لحوم متنوعة يمكنك طهوها وتقديمها مع البصل الذي حضرته بالزيت في المستوى السابق. يمكن طهي اللحوم بطرق مختلفة وحتى درجات حرارة/ندرة مختلفة، ويمكن تحقيق ذلك عن طريق إنشاء كائنات من الفئات، كما في المستويات السابقة ولكن يمكن تعزيزها باستخدام الدوال الفائقة.
تُستخدم دالة super() بطريقة مشابهة لتجاوز الدوال (method overriding)، والفرق هو أنه باستخدام هذه الدالة يمكنك تشغيل دالة الفئة الأصلية بالإضافة إلى الكود الخاص بك في الفئة الفرعية بدلاً من تجاوز الدالة بالكامل.
# Parent Class
class cooked_meat:
type = ""
def cook_meat(self):
player.speak("Cooking the %s meat with oil
and onions." % self.type)
player.place("meat")
player.collect("cooked %s" % self.type)
# Child Class
class ready_meat(cooked_meat):
rarity = ""
def cook_meat(self):
super().cook_meat()
player.speak("The meat is cooked %s" % self.rarity)
داخل دالة الفئة الفرعية class cook_meat()، تُستخدم دالة super(). وبما أن cook_meat() هي أيضًا دالة مستخدمة في الفئة الأصلية، فإن الدالة المخصصة عادةً ما تتجاوز الكود الموروث بسبب تجاوز الدوال ولكن باستخدام دالة super() يمكنك تنفيذ الكود في الفئة الأصلية بالإضافة إلى الكود الجديد الذي تكتبه في الفئة الفرعية.
أولاً، توجه إلى الثلاجة واجمع أربع (4) قطع من اللحم التي ستستخدمها للطهي. كل من اللحوم الأربع (4) هو من نوع مختلف، وهي: "pork"، "beef"، "lamb" و"buffalo".
بمجرد جمعها، توجه إلى علامة X الخفيفة وأنشئ كائنات لكل من اللحوم من أجل طهيها ولكل كائن لحم، قم بتعيين نوع اللحم والندرة التي ترغب في طهيها، على سبيل المثال:
pork_meat = ready_meat() pork_meat.type = "pork" pork_meat.rarity = "medium" pork_meat.cook_meat()
الندرة هي درجة حرارة الطهي التي ترغب في طهي اللحم عندها، يجب أن تُطهى اللحوم حتى الندرات التالية: اللحم من "pork" يُطهى بنضج "medium"، و"beef" يُطهى بنضج "well done"، و"buffalo" يُطهى بنضج "medium rare"، و"lamb" يُطهى بنضج "rare". عند علامة X استخدم دالة الفئة الفرعية cook_meat() بعد تعيين نوع وندرة اللحم كما هو موضح في المثال أعلاه.
بمجرد طهي اللحوم، توجه إلى علامة X الداكنة على السجادة الصفراء واستخدم دالة collect() لأخذ كل من "salt" و"pepper" من المخبز. أنشئ قائمة باسم ingredients وضع فيها المكونين اللذين تم جمعهما، مثل: ingredients = ["salt","pepper"].
مع المكونات الإضافية يمكنك الآن تقديم اللحم مع الصحون على الطاولة. أنشئ قائمة لكل من اللحوم المطهية بالأسماء التالية: served_pork، served_beef، served_lamb وserved_buffalo. قم بإلحاق في هذه القوائم اللحوم التي قمت بطهوها مع قائمة المكونات عن طريق إنشاء قائمة متداخلة، على سبيل المثال:
served_pork = [] served_pork.append("cooked pork") served_pork.append(ingredients)
بمجرد إعداد القوائم، توجه إلى علامات X الذهبية واستخدم دالة place() لتقديم اللحم على الصحون الموجودة على الطاولات. على علامة X الذهبية العلوية، أثناء مواجهة الطاولة، place(): served_pork و served_buffalo. على علامة X الذهبية السفلية، أثناء مواجهة الطاولة، place(): served_lamb و served_beef. على سبيل المثال: player.place(served_pork), وبمجرد تقديم جميع اللحوم ستكون قد أكملت المستوى.