С использованием attrs pre-commit ошибка mypy: неожиданный аргумент ключевого слова

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"]

Можете ли вы добавить определение MyClass?

Barmar 04.09.2024 19:45

Да, я могу. Сделанный

Sebastian Souza Tarnowski 04.09.2024 21:00
mypy нужен плагин, чтобы понять, как define изменяет декорированный класс. Это установлено на другой машине?
chepner 04.09.2024 21:19

Я попробовал с помощью плагинов = mypy.plugins.attrs [mypy.ini] и получил эту ошибку: Плагин «mypy.plugins.attrs» не определяет функцию точки входа «плагин» [разное]. В документации attrs здесь упоминается специальный плагин attrs.org/en/stable/extending.html (странно то, что ошибки случаются только при предварительной фиксации, когда я запускаю mypy на терминале, все в порядке)

Sebastian Souza Tarnowski 04.09.2024 21:45

Перехватчики предварительной фиксации Python запускаются в отдельной виртуальной среде, а не в виртуальной среде вашего проекта. Таким образом, у них нет доступа к зависимостям вашего проекта. Вы можете запустить его из предварительной фиксации таким образом, чтобы это работало, но вам нужно настроить перехватчик как repo: local, language: system, т. е. запустить mypy как локальную команду оболочки (с активированным виртуальным окружением).

Anentropic 05.09.2024 12:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
213
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не используйте Mypy из предварительной фиксации. Mypy требует просмотра сторонних пакетов, которые использует код, даже несмотря на то, что у него есть встроенный плагин attrs, который не требует активации.

Вы можете протестировать это очень легко (и я только что это сделал): установите Mypy в свой venv с вашим проектом и attrs и запустите его оттуда: все проходит.

Да, это то, что я делаю, а не запускаю mypy при предварительной фиксации. Спасибо

Sebastian Souza Tarnowski 05.09.2024 22:18

На всякий случай я создал ошибку github.com/python/mypy/issues/17735

Sebastian Souza Tarnowski 05.09.2024 22:57

Другие вопросы по теме