# -*- coding: utf-8 -*-
"""
クラスの継承の練習（Animal, Dog, Cat）
"""


# 動物のクラス
class Animal:
    ashi    = 4   # 足の本数
    nakigoe = ""  # 鳴き声（とりあえず無音）

    # 歩く
    def aruku(self):
        print("てくてく")

    # 鳴く
    def naku(self):
        print(self.nakigoe)


# 犬のクラス
class Dog(Animal):
    nakigoe  = "ワン！"  # 鳴き声は共通の形で設定
    kainushi = "不明"

    # 飼い主を聞く
    def ouchi(self):
        return self.kainushi  # 文字列を戻す

    # 散歩する（繰り返し歩く）
    def sanpo(self, n=3):
        print("行ってきます")
        for i in range(n):
            self.aruku()
        print("ただいま")


""" 指示ここから """
# このコメントブロックの下に，
# Animalクラスを継承した猫のクラス（Cat）を宣言しなさい．
# ただし，下記の仕様を満たすこと．
# ・鳴き声は「ニャー」
# ・足音は「とことこ」
# ・顔を洗うと雨が降るインスタンスメソッド kao() を持つ
### def kao(self, dousa)
# dousa が文字列「洗う」または「あらう」の場合には「雨が降る」
# それ以外の場合には鳴き声の【文字列を戻す】

class Cat(Animal):
    nakigoe = "ニャー"

    def aruku(self):
        print("とことこ")
    
    def kao(self, dousa):
        if (dousa == "洗う") or (dousa == "あらう"):
            return "雨が降る"
        else:
            return __class__.nakigoe

""" 指示ここまで """


def main():
    pochi = Dog()  # インスタンスを生成
    tama  = Cat()  # 同上
    pochi.kainushi = input("飼い主：")  # メンバ変数を上書き
    print()  # 採点の都合上の空行

    print(f"ポチの足は{pochi.ashi}本")
    pochi.sanpo()         # インスタンスメソッドを呼び出し
    print(pochi.ouchi())  # 戻り値のあるメソッドを呼び出し
    pochi.naku()          # インスタンスメソッドを呼び出し

    # tamaにもほぼ同じことをする
    print(f"タマの足は{tama.ashi}本")
    tama.aruku()
    print(tama.kao(input("タマの顔を：")))
    tama.naku()


if __name__ == "__main__":
    main()
