# Необходимо реализовать классы животных на ферме:
# Коровы, козы, овцы, свиньи;
# Утки, куры, гуси.
# Условия:
# Должен быть один базовый класс, который наследуют все остальные животные.
# Базовый класс должен определять общие характеристики и интерфейс.

class Animal:
    def __init__(self, weight, color, height, sound):  # атрибуты базового класса: вес, цвет, рост, издаваемый звук
        self.weight = weight
        self.color = color
        self.height = height
        self.sound = sound

    def signal(self):  # пример интерфейса - оно может издавать звук
        print(self.sound)


class Bird(Animal):
    def __init__(self, weight, color, height, sound, wing_len, legs):  # в атрибуты наследника добавляем размах крыльев
        super().__init__(weight, color, height, sound)  # от родителя оставляем вес, цвет, рост, звук
        self.wing_len = wing_len
        self.legs = legs


class Mammal(Animal):
    def __init__(self, weight, color, height, sound, legs):  # в атрибуты наследника добавляем размах крыльев
        super().__init__(weight, color, height, sound)  # от родителя оставляем вес, цвет, рост, звук
        self.legs = legs


class Cow(Mammal):
    def __init__(self, weight, color, height, sound, legs,
                 name):  # в атрибуты наследника имя для будущих объектов класса
        super().__init__(weight, color, height, sound, legs)  # от родителя оставляем вес, цвет, высоту, звук, ноги
        self.name = name

    def info(self):
        print('Корова', self.name)


class Goat(Mammal):
    def __init__(self, weight, color, height, sound, legs,
                 name):  # в атрибуты наследника имя для будущих объектов класса
        super().__init__(weight, color, height, sound, legs)  # от родителя оставляем вес, цвет, высоту, звук, ноги
        self.name = name

    def info(self):
        print('Коза', self.name)


class Sheep(Mammal):
    def __init__(self, weight, color, height, sound, legs,
                 name):  # в атрибуты наследника имя для будущих объектов класса
        super().__init__(weight, color, height, sound, legs)  # от родителя оставляем вес, цвет, высоту, звук, ноги
        self.name = name

    def info(self):
        print('Овца', self.name)


class Pig(Mammal):
    def __init__(self, weight, color, height, sound, legs,
                 name):  # в атрибуты наследника имя для будущих объектов класса
        super().__init__(weight, color, height, sound, legs)  # от родителя оставляем вес, цвет, высоту, звук, ноги
        self.name = name

    def info(self):
        print('Коза', self.name)


class Duck(Bird):
    def __init__(self, weight, color, height, sound, wing_len, name,
                 legs):  # в атрибуты наследника имя для будущих объектов класса
        super().__init__(weight, color, height, sound, wing_len,
                         legs)  # от родителя оставляем вес, цвет, высоту, звук, крылья, ноги
        self.name = name

    def info(self):
        print('Утка', self.name)


class Hen(Bird):
    def __init__(self, weight, color, height, sound, wing_len, name,
                 legs):  # в атрибуты наследника имя для будущих объектов класса
        super().__init__(weight, color, height, sound, wing_len,
                         legs)  # от родителя оставляем вес, цвет, высоту, звук, крылья, ноги
        self.name = name

    def info(self):
        print('Курица', self.name)


class Goose(Bird):
    def __init__(self, weight, color, height, sound, wing_len, name,
                 legs):  # в атрибуты наследника имя для будущих объектов класса
        super().__init__(weight, color, height, sound, wing_len,
                         legs)  # от родителя оставляем вес, цвет, высоту, звук, крылья, ноги
        self.name = name

    def info(self):
        print('Гусь', self.name)


a = Goose(100, 'white', 100, 'gaga', 100, 'white', 2)
print(a.info())