Как правильно описать метод родительского класса?

Имеется родительский класс:

class Parent(abc.ABC):

    def method(self, param1: Any, param2: Any) -> bool:
        """Метод может быть переопределен
        
        Возвращает True если надо пропустить вызов следующего метода, иначе False
        """
        pass  # return False
    
    @abstractmethod
    def can_be_skiped(self):
        pass
   
    def run(self):
        if self.method():
            return
        self.can_be_skiped()

Метод method() должен быть заполнен некой логикой в классе наследника и возвращать bool.

Вопрос: Надо ли делать в методе родителя дефолтный return (как это написано комментарием), в таком случае также будет ругаться линтер, т.к. параметры метода неиспользуются.

Я склоняюсь к pass, но не могу нормально аргументировать почему именно так. Может кто-то подсказать что почитать, куда посмотреть?


Ответы (1 шт):

Автор решения: insolor

Если метод будет вызываться, то он должен возвращать значение согласно спецификации (документации, тайп-хинтам). Если вы оставляете только pass, то метод будет возвращать None - а это явно не bool значение.

Если нужно убрать предупреждение линтера о неиспользуемых параметрах, используйте функциональность линтера по подавлению предупреждений, а не добавляйте бессмысленный код типа del param1, param2.

Если используйте pylint, добавьте комментарий # pylint: disable=unused-argument к методу:

    def method(self, param1: Any, param2: Any) -> bool:  # pylint: disable=unused-argument
        """Метод может быть переопределен
        
        Возвращает True если надо пропустить вызов следующего метода, иначе False
        """
        return False

Имя отключаемого параметра взято из текста предупреждения pylint:

test.py:8:21: W0613: Unused argument 'param1' (unused-argument)

Можно использовать код W0613 вместо имени, но по имени проще понять, что имел в виду программист.

См. документацию pylint: Messages control

Аналогичные способы подавления предупреждений есть и у других линтеров.

→ Ссылка