Форум программистов, компьютерный форум, киберфорум
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. Показов 1646. Ответов 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
 Аватар для Рыжий Лис
5972 / 3734 / 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
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru