Если вы не добавляете аннотации типов в функцию, вы указываете, что НЕ хотите, чтобы PEP-484-совместимые контроллеры типов проверяли эту функцию.
Это означает, что вам нужно применить подход 2: явно добавить подсказки типа, чтобы Pycharm (и mypy) знали, что вы хотите, чтобы эта функция проверялась на тип.
Обратите внимание, что ваш обходной путь 1 действительно не работает: если вы добавляете файл * .pyi, вы говорите контролеру типов полностью игнорировать соответствующий файл * .py. Это, вероятно, не то, что вы хотите, чтобы здесь произошло.
В более широком смысле, Pycharm (или mypy) на самом деле неверно предполагал бы, что timestamp
всегда имеет тип float
: для подтипа допустимо расширять тип параметра. Например, это может быть случай, когда метод отметки времени B
принимает значения с плавающей точкой ИЛИ strs:
class B(A):
def timestamp(self, timestamp):
# type: (Union[float, str]) -> None
print(timestamp)
Или, возможно, он может быть расширен для принятия любого типа:
class B(A):
def timestamp(self, timestamp):
# type: (object) -> None
print(timestamp)
Оба эти определения являются действительными подтипами A: они оба соответствуют подписи A.timestamp, не нарушая принцип подстановки Liskov .
Следовательно, поскольку мы не можем легко определить, какими должны быть сигнатуры подтипа, Pycharm (и mypy) не пытаются.