Форум программистов, компьютерный форум, киберфорум
Python: IDE, инструментарий
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387

Dataclass + sorted = PyCharm warning

05.02.2024, 21:42. Показов 1703. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Имеем следующий код.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from dataclasses import dataclass, field
 
 
@dataclass(order=True)
class Foo:
    sort_index: int = field(init=False, repr=False)
    data: list[int] = field(default_factory=list)
 
    def __post_init__(self):
        self.sort_index = len(self.data)
 
 
x = [Foo([1, 2, 3]), Foo([4, 5])]
 
print(sorted(x))
Все работает, но PyCharm подчеркивает x как аргумент функции sorted.
И выдает следующее предупреждение:
Expected type 'Iterable[SupportsRichComparisonT]', got 'list[Foo]' instead

Я правильно понимаю, что это очередной баг PyCharm? Т.е. PyCharm просто не понимает, что dataclass(order=True) внутри себя поддерживает операции "сравнения".

Если так, как с этим быть? Есть какое-то "красивое" решение? Или просто отключить это предупреждение?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.02.2024, 21:42
Ответы с готовыми решениями:

Property и аргументы сеттера = Warning в PyCharm
Добрый вечер друзья. Подскажите плиз, в чем может быть проблема. Вот пример кода (Сам код смысла не имеет, чисто как...

Pycharm и PyQT5 выдает warning
Приветствую! Товарищи, помогите разобраться с одной проблемкой... После установки pyqt5 создавал графические приложения и во время...

Warning: stat failed For up.php (errno=2 - No such File Or directory) Warning: Undefined variable: part in
При выполнении скрипта у меня постоянно выдаются сообщения типа: Warning: Undefined index: Warning: stat failed For up.php (errno=2 -...

9
Исследователь
 Аватар для TonyAlt
5 / 3 / 2
Регистрация: 14.03.2022
Сообщений: 57
05.02.2024, 21:54
IDLE Python пашет без всяких предупреждений
0
Исследователь
 Аватар для TonyAlt
5 / 3 / 2
Регистрация: 14.03.2022
Сообщений: 57
05.02.2024, 21:56
вот скрин
Миниатюры
Dataclass + sorted = PyCharm warning  
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
05.02.2024, 21:57  [ТС]
Причем добавление в 13-й строке полноценного type hint проблему не решает.
Python
1
x: list[Foo] = [Foo([1, 2, 3]), Foo([4, 5])]
А вот замена list[Foo] на просто list помогает (убирает варнинг).
Python
1
x: list = [Foo([1, 2, 3]), Foo([4, 5])]
Но появляется другая проблема, больше не работает автокоплит. Т.е. после условного x[0]. IDE мне не предлагает подставить туда поле (data).
0
Исследователь
 Аватар для TonyAlt
5 / 3 / 2
Регистрация: 14.03.2022
Сообщений: 57
05.02.2024, 21:59
Цитата Сообщение от anton78spb Посмотреть сообщение
Причем добавление в 13-й строке полноценного type hint проблему не решает.
Цитата Сообщение от anton78spb Посмотреть сообщение
А вот замена list[Foo] на просто list помогает (убирает варнинг).
у меня в IDLE всё тот же результат
1
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
05.02.2024, 22:01  [ТС]
Цитата Сообщение от TonyAlt Посмотреть сообщение
IDLE Python пашет без всяких предупреждений
VS Code тоже никаких предупреждений не дает. Вопрос в данном случае конкретно к PyCharm.

Добавлено через 1 минуту
Цитата Сообщение от TonyAlt Посмотреть сообщение
у меня в IDLE всё тот же результат
Да, замена list[Foo] на list в VS Code работает аналогично. Прост с list нет подсказок.
0
Исследователь
 Аватар для TonyAlt
5 / 3 / 2
Регистрация: 14.03.2022
Сообщений: 57
05.02.2024, 22:08
Ну тогда это просто очередной баг PyCharm
0
32 / 24 / 11
Регистрация: 03.06.2023
Сообщений: 56
05.02.2024, 22:09
Попробуйте
Python
1
x: Iterable[Foo] = [Foo([1, 2, 3]), Foo([4, 5])]
, импортировав Iterable из typing. Ну или можно сделать так:
Python
1
print(sorted(x))  # type: ignore
1
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
05.02.2024, 22:28  [ТС]
Doule_,
Python
1
x: Iterable[Foo] = [Foo([1, 2, 3]), Foo([4, 5])]
как и List тоже из модуля typing
Python
1
x: List[Foo] = [Foo([1, 2, 3]), Foo([4, 5])]
не помогли (варнинг остался).
А вот # type: ignore интересное решение. Не знал о таком. Спасибо.
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
10.02.2024, 07:49
Цитата Сообщение от anton78spb Посмотреть сообщение
А вот # type: ignore интересное решение. Не знал о таком. Спасибо.
Для pycharm'a правильнее так (комментарий перед строкой):
Python
1
2
3
x = [Foo([1, 2, 3]), Foo([4, 5])]
# noinspection PyTypeChecker
print(sorted(x))
Добавлено через 1 минуту
А это глушит вообще любые предупреждения, не рекомендую к использованию (комментарий на этой же строке):
Python
1
print(sorted(x))  # noqa
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.02.2024, 07:49
Помогаю со студенческими работами здесь

Работа функции sorted
У Лутца в книге есть такой пример: def intersect(*args) : res = for x in args: if x in res: continue ...

Почему не работает sorted?
n=int(input()) a,b,c=set(),set(),set() while True: b={s for s in input().split()} if 'HELP' in b: ...

dict sorted with lambda
Доброго времени суток уважаемые пользователи форума! Есть некий словарь, допустим: random_dict = { 'elephant': 321, 'cat':...

ValueError в методе sorted
Есть код, сортирующий массив словарей по второму массиву. a = b = res = sorted(a, key=lambda d: b.index(d))

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in Z:\home\1x.loc\www\login.php on line 33 Warning
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru