Проверка статического типа для абстрактного метода в Python

1

Как мне убедиться, что метод, реализующий абстрактный метод, придерживается статических проверок типов Python. Есть ли способ в Pycharm, чтобы получить ошибку, если тип возвращаемого значения является неправильным для реализованного метода?

class Dog:
    @abc.abstractmethod
    def bark(self) -> str:
        raise NotImplementedError("A dog must bark")

class Chihuahua(Dog):
    def bark(self):
        return 123

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

Теги:
pycharm

1 ответ

1

Нет, не существует (простого) способа обеспечить это.

И на самом деле в вашем Chihuahua нет ничего плохого, так как типизация Python duck позволяет вам переопределить сигнатуру (как аргументы, так и типы) bark. Таким образом, Chihuahua.bark возвращающий int является полностью допустимым кодом (хотя это не обязательно хорошая практика, поскольку это нарушает LSP). Использование модуля abc не меняет этого вообще, так как не обеспечивает подписи методов.

Для "принудительного применения" типа просто перенесите подсказку типа в новый метод, что делает его явным. Это также приводит к тому, что PyCharm показывает предупреждение.

import abc

class Dog:
    @abc.abstractmethod
    def bark(self) -> str:
        raise NotImplementedError("A dog must bark")

class Chihuahua(Dog):
    def bark(self) -> str:
        # PyCharm warns against the return type
        return 123

Ещё вопросы

Сообщество Overcoder
Наверх
Меню