"""
Модуль является результатом выполнения практической
домашней работы по теме "Наследование классов"

Задачу решил через абстрактный класс Animal, с абстрактным методом
make_sound, который обязательно должен быть реализован
в дочерних классах(иначе будет Error).

:copyright: Сергей Ванюшкин <pi3c@yandex.ru>
:git: https://git.pi3c.ru/pi3c/StudyRepo_Synergy.git
:license: MIT
2023г.
"""


from abc import ABC, abstractmethod


class Animal(ABC):
    def __init__(self, **kwargs):
        self.name = kwargs.get("name") or "Безымянное"
        self.species = kwargs.get("species") or "Чудище заморское"

    @abstractmethod
    def make_sound(self):
        pass


class Dog(Animal):
    def make_sound(self):
        return "Гав"

    def bark(self):
        return "Лай,лай,лАй, лалаайлай..."


class Cat(Animal):
    def make_sound(self):
        return "Мяу"

    def purr(self):
        return "Мурмурмур"


class SomeAnimal(Animal):
    def make_sound(self):
        return "Кряхтит, скрипит, зубами клацает"


if __name__ == "__main__":
    animals = (
        Dog(name="Rex", species="Собакен обычный"),
        Cat(name="Кузя", species="Котяра хитрожопый"),
        Dog(name="Галкин", species="Двортерьер Кусучий"),
        SomeAnimal(),
    )

    for an in animals:
        print("Досье")
        print("Вид:", an.species)
        print("кличка:", an.name)
        print("говорит:", an.make_sound())
        if isinstance(an, Cat):
            print(an.name, "доволен:", an.purr())
        elif isinstance(an, Dog):
            print(an.name, "злой пес:", an.bark())
        print()
