LINUX.ORG.RU

История изменений

Исправление FishHook, (текущая версия) :

@czan

Вы сделали инициализатор абстрактным, чтобы гарантировать, что в подклассах устанавливается значение health_points? Но ведь это никак не гарантируется, ибо что мне помешает сделать вот так?

class Creature(abc.ABC):
    health_points: int

    @abc.abstractmethod
    def __init__(self):
        pass

class EarthCreature(Creature):
    pass

class Troll(EarthCreature):

    def __init__(self) -> None:
        self.fuckit: int = 100

если вы хотите решение в виде более-менее классического ООП, то это будет выглядеть как-то так

class Creature(abc.ABC):
    
    @property
    def health_points(self):
       return self.get_health_points()

    @abc.abstractmethod
    def get_health_points(self):
        pass

Исходная версия FishHook, :

@czan

Вы сделали инициализатор абстрактным, чтобы гарантировать, что в подклассах устанавливается значение health_points? Но ведь это никак не гарантируется, ибо что мне помешает сделать вот так?

class Creature(abc.ABC):
    health_points: int

    @abc.abstractmethod
    def __init__(self):
        pass

class EarthCreature(Creature):
    pass

class Troll(EarthCreature):

    def __init__(self) -> None:
        self.fuckit: int = 100

если вы хотите решение в виде более-менее классического ООП, то это будет выглядеть как-то так

class Creature(abc.ABC):
    health_points: int
    
    @property
    def health_points(self):
       return self.get_health_points()

    @abc.abstractmethod
    def get_health_points(self):
        pass