上級Python開発コース
チャプター
>
レベル
上級クラス
スーパー関数
目的
様々な肉を集め、それらをオブジェクトとして生成する際にスーパー関数を用いることで、異なる方法で調理し提供しましょう。
冷蔵庫には、前のレベルで油で調理して用意した玉ねぎと一緒に、調理して提供できる様々な肉が入っています。これらの肉は、異なる方法や、異なる温度/レア度で調理することができ、以前のレベル同様にクラスからオブジェクトを生成することで実現できますが、スーパー関数 を用いることでさらに強化できます。
super() 関数はメソッドのオーバーライドと同様の方法で使用されますが、違いは、この関数を用いることで、子クラス内で自分のコードに加えて、完全に関数をオーバーライドする代わりに親クラスの関数を実行できる点にあります。
# 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)
子クラスの関数 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 マークのところへ歩き、パントリーから "salt" と "pepper" の両方を collect() 関数を使って取得します。そして、ingredients という名前のリストを作成し、以下のように2つの取得した材料を格納してください: ingredients = ["salt","pepper"] 。
追加の材料を使って、テーブル上の皿で肉を提供することができます。調理済みの各肉に対し、以下の名前のリストを作成します: served_pork , served_beef , served_lamb および served_buffalo 。これらのリストには、調理した肉と ingredients リストを、ネストされたリストとして追加してください。例えば:
served_pork = [] served_pork.append("cooked pork") served_pork.append(ingredients)
リストの準備ができたら、ゴールドの X マークのところへ歩き、カウンター上の皿に肉を提供するために place() 関数を使用します。上側のゴールド X マークでは、テーブルに向かって、served_pork と served_buffalo を place() してください。下側のゴールド X マークでは、テーブルに向かって、served_lamb と served_beef を place() してください。例えば: player.place(served_pork) 。すべての肉が提供されれば、レベルクリアとなります。