Как правильно описать метод родительского класса?
Имеется родительский класс:
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 шт):
Если метод будет вызываться, то он должен возвращать значение согласно спецификации (документации, тайп-хинтам). Если вы оставляете только 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
Аналогичные способы подавления предупреждений есть и у других линтеров.