Здравствуйте, задачка для курсовой на чистое ООП, и похоже нужно унаследовать метод чуть ли не из дочернего класса (не кидайте тапки, посмотрите в чём загвоздка)))
Есть родительский класс, общий для 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. Прикрепляю файл с полным кодом.
Есть родительский класс, общий для 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