class Unit:
    """В этом классе определим нашего героя
    заметим, что если он ничего не наследует то и скобки можно не ставить"""
    def __init__(self, name, hp, position, **kwargs):
        """инициализируем наш класс основными параметрами, имя, здоровье, позиция"""
        self.name = name
        self.hp = hp
        self.position = position
        self.disabled = False

    def show_unit(self):
        """Печатает все основные параметры юнита"""
        print('The unit {0}, has {1} hp, and its coordinate is {2}'.format(str(self.name), str(self.hp), str(self.position)))

    def move(self, distance):
        """Перемещает юнит, если он не disabled"""
        if self.disabled:
            print('Unit is disabled and can\'t move')
        else:
            self.position = self.position + distance
            
            
class Archer(Unit):
    """Этот класс наследует класс Unit, он описывает лучнка"""
    def __init__(self, name, hp, position, **kwargs):
        """Инициализируем лучника, помимо основных параметров - позиция, здоровье и имя,
        у него ещё есть параметр: урон"""
        super().__init__(name, hp, position)  # берём инициализатор из родительского класса
        if kwargs['damage'] is not None:
            self.damage = kwargs['damage']  # каждому лучнику можно установить свой урон
        else:
            self.damage = 15  # если урон не указали

    def attack(self, obj):
        """метод атаки другого юнита, атакует, если не disabled"""
        if self.disabled:
            print('Unit is disabled and can\'t shoot')
        else:
            obj.hp = obj.hp - self.damage


class Magician(Unit):
    """Описываем волшебника, который также может атаковать"""
    def __init__(self, name, hp, position, mp, **kwargs):
        super().__init__(name, hp, position)
        self.damage = 5
        self.mp = mp

    def disable(self, obj):
        """Описываем заклинание заморозки юнита"""
        if self.mp < 30:
            print('Недостаточно маны')
        else:
            obj.disabled = True
            self.mp = self.mp - 40


class Hero(Archer, Magician):
    def __init__(self, name, hp, position, mp, **kwargs):
        super().__init__(name, hp, position, mp)