• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Помогите подобрать решение, перегрузка\наследование методов

Belfoger

New member
05.11.2019
2
0
BIT
0
Здравствуйте, задачка для курсовой на чистое ООП, и похоже нужно унаследовать метод чуть ли не из дочернего класса (не кидайте тапки, посмотрите в чём загвоздка)))
Есть родительский класс, общий для 4-х классов. В нем в частности есть метод whattodo() (он возвращает команду в виде строки), который вызывает whatside(). Этот whatside() для каждого из 4 классов выполняется по-разному, поэтому перегружен в каждом классе. В whatside() класса Defend если условие if выполняется, то работает метод fire_back() родительского класса (всё леко и понятно), но в случае else должен вернуть результат по принципу whatside() для класса Gvard. Т.е. после else должен быть вызван whatside() из соседнего класса Gvard. Первая идея это как-то его унаследовать, вторая - создать функцию f = whatside_из_Defend и вызвать f(), третья и самая дикая обратиться напрямую "такая функция из такого класса - выполнись" (сомневаюсь, что питон так может) Назвать whatside() как-то иначе нельзя, потому что whattodo(), его вызывающий, определен один раз для всех.
То же самое нужно сделать для другого класса: если условие if whatside() класса Patul истино, то должен быть вызван whatside() из Defend. Прикрепляю файл с полным кодом.

Python:
class Robo:
    def __init__(self, my_en, my_arm, model, enemies, en_en, phi):...
    def whatpower(self):...# метод определяет X единиц энергии
    def fire_back(self):...# отступает, отстреливаясь
    def fire_forw(self):...# наступает, отстреливаясь
  
    def whattodo(self): # возвращает команду в нужном формате
        side = self.whatside()
        if side == 'STOP':
            return side
        elif side == 'FIRE':
            p = self.whatpower()
            return side, p
        else:
            x = self.whatpower()
            return side, x
           
class Gvard (Robo):
    def whatside(self):
        if self.enemies == 0:
            return 'STOP'
        else:
            if abs(self.phi) < 5:
                return 'FIRE'
            elif self.phi >= 5:
                return 'LEFT'
            else:
                return 'RIGHT'

class Defend(Robo):
    def whatside(self):
        if self.enemies*20 > self.my_arm:
            self.fire_back()
        else: # должен быть вызван whatside() из Gvard
            pass
           
class Patrul(Robo):
    def __init__(self, my_en, my_arm, model, enemies, en_en, phi, depart):...
    def whatside(self):
        if enemies >0 : #должен быть вызван whatside() из Defend
            pass
 

Вложения

  • krya.txt
    3,8 КБ · Просмотры: 304
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!