У меня есть абстрактный класс ship
.Обновление классов, которые наследуются от абстрактных классов
from abc import ABC, abstractmethod
class ship(ABC):
def __init__(self):
...
@abstractmethod
def do_stuff(self,stuff,things):
pass
У меня есть несколько классов, которые наследуют от него (destroyer
, cruiser
, patrol_boat
и т.д ...)
class carrier(ship):
def __init__(self):
....
def do_stuff(self,stuff,things):
....
В настоящее время, если бы я добавить, скажем def do_more_stuff(self):
к ship
class ship(ABC):
def __init__(self):
...
@abstractmethod
def do_stuff(self,stuff,things):
pass
@abstractmethod
def do_more_stuff(self,stuff,things):
pass
Изменения не повлияют ни на один из подклассов, пока я не верну их в консоль. Как мне это изменить?
Вам нужно предоставить достаточно кода, чтобы показать, что вы на самом деле сделали ([MVCE] (https://stackoverflow.com/help/MCVE)). Редактирование супер _класса_ для добавления новых методов должно работать (это мягко неэффективно для этого после определения подклассов, но не необоснованно), но я подозреваю, что вы ошибочно редактируете _instances_ или вообще не редактируете класс. – ShadowRanger
Мне кажется, что я переопределяю 'ship', оставляя оставшиеся классы наследовать от предыдущего определения' ship'. Как я могу добавить функции для 'ship' без повторного ввода всего блока? – David
Вы правы в переопределении всего класса, не изменяя того, что наследует подклассы. Мой ответ охватывает детали здесь; существует способ, который работает для не абстрактных методов, но абстрактные методы не могут использовать эту технику. – ShadowRanger