mypy отлично работает на терминале, но при работе на этапе предварительной фиксации я получаю ошибку Неожиданный аргумент ключевого слова для каждого свойства в моем классе
from attrs import define, field
@define(
frozen=True,
kw_only=True,
slots=True,
auto_detect=True,
order=False,
auto_attribs=True,
)
class MyClass:
a: str = field(default = "")
b: str = field(default = "")
def myMethod(self) -> Any:
return MyClass(a=self.a, b = "b_value")
Предварительная фиксация mypy не удалась:
ошибка: неожиданный аргумент ключевого слова «a» для MyClass (строка: return MyClass...)
ошибка: неожиданный аргумент ключевого слова «b» для MyClass (строка: вернуть MyClass...)
.pre-commit-config.yaml:
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.11.2
hooks:
- id: mypy
args: ["--config-file", "mypy.ini"]
Да, я могу. Сделанный
mypy
нужен плагин, чтобы понять, как define
изменяет декорированный класс. Это установлено на другой машине?
Я попробовал с помощью плагинов = mypy.plugins.attrs [mypy.ini] и получил эту ошибку: Плагин «mypy.plugins.attrs» не определяет функцию точки входа «плагин» [разное]. В документации attrs здесь упоминается специальный плагин attrs.org/en/stable/extending.html (странно то, что ошибки случаются только при предварительной фиксации, когда я запускаю mypy на терминале, все в порядке)
Перехватчики предварительной фиксации Python запускаются в отдельной виртуальной среде, а не в виртуальной среде вашего проекта. Таким образом, у них нет доступа к зависимостям вашего проекта. Вы можете запустить его из предварительной фиксации таким образом, чтобы это работало, но вам нужно настроить перехватчик как repo: local, language: system
, т. е. запустить mypy как локальную команду оболочки (с активированным виртуальным окружением).
Не используйте Mypy из предварительной фиксации. Mypy требует просмотра сторонних пакетов, которые использует код, даже несмотря на то, что у него есть встроенный плагин attrs, который не требует активации.
Вы можете протестировать это очень легко (и я только что это сделал): установите Mypy в свой venv с вашим проектом и attrs и запустите его оттуда: все проходит.
Да, это то, что я делаю, а не запускаю mypy при предварительной фиксации. Спасибо
На всякий случай я создал ошибку github.com/python/mypy/issues/17735
Можете ли вы добавить определение
MyClass
?