Я проверяю тип проекта, который использует панд . Pandas не содержит аннотации типов и в наборе нет заглушки.
Как и следовало ожидать, mypy вызывает ошибку для этого простого примера:
class A:
def method(self) -> int:
return 1
class B(A):
def method(self) -> float:
return 1.1
$ mypy mypy_example.py
mypy_example.py:11: error: Return type "float" of "method" incompatible with return type "int" in supertype "A"
Рассмотрим следующий пример:
class C:
def method(self) -> pd.Series:
return pd.Series([1, 2, 3])
class D(C):
def method(self) -> pd.DataFrame:
return pd.DataFrame({"a": [1, 2, 3]})
Как и ожидалось, mypy говорит, что для панд не найден стаб-файл, поэтому не находит ошибку.
$ mypy mypy_example.py
mypy_example.py:1: error: No library stub file for module 'pandas'
mypy_example.py:1: note: (Stub files are from https://github.com/python/typeshed)
mypy_example.py:11: error: Return type "float" of "method" incompatible with return type "int" in supertype "A"
Я мог установитьignore_missing_imports
, но это означает, что я пропускаю ошибку, которую хочу уловить.
Я пробовал несколько вещей в стаб-файлах безуспешно:
from typing import Any, NewType
# dynamic typing, but doesn't discriminate between Series and DataFrame
Series = Any
DataFrame = Any
# discriminates but doesn't dynamically type
Series = NewType('Series', object)
DataFrame = NewType('DataFrame', object)
Можно ли написатькороткая заглушка или аннотация типа, которая позволит мне воспользоваться преимуществами динамической типизации, но я пойму, что pd.Series
и pd.DataFrame
- это разные типы?