Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 18.03.2018
Сообщений: 61

Как получить экземпляр класса по его значению поля, не используя перебор?

27.03.2021, 18:32. Показов 4380. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я создал массив, в который помещаю экземпляры класса Member. У каждого экземпляра есть свой уникальный ID. Как я могу получить нужный мне экземпляр по значению этого ID, не используя при этом перебор всех экземпляров в массиве?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2021, 18:32
Ответы с готовыми решениями:

Как получить экземпляр класса после его хранения в сессии?
Приветствую! Столкнулся со следующей бедой - решил разобраться, как написать свой инет-магазин, добрался до реализации корзины....

Создать экземпляр одного класса в Main, и передать его в экземпляр другого класса
Добрый день. Подскажите пожалуйста. есть несколько классов-файлов в одном пакете. class one class two class main... Нужно...

Как найти экземпляр класса по значению атрибута?
Здравстуйте, я сейчас решаю задачку и у меня возникла проблема. условие: ...

11
 Аватар для Semen-Semenich
5226 / 3472 / 1174
Регистрация: 21.03.2016
Сообщений: 8,299
27.03.2021, 18:54
Лучший ответ Сообщение было отмечено GavNoKoder как решение

Решение

соберите в словарь где ключ ID а значение экземпляр. список в любом случае нужно будет проверять в цикле даже не явно используя фильтр
3
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
27.03.2021, 18:58
GavNoKoder, используй не массив а сет, и у класса реализуй метод hash на основе его id, тогда искать будет без перебора.
0
 Аватар для Semen-Semenich
5226 / 3472 / 1174
Регистрация: 21.03.2016
Сообщений: 8,299
27.03.2021, 19:04
Welemir1, а можно пример
Цитата Сообщение от Welemir1 Посмотреть сообщение
используй не массив а сет, и у класса реализуй метод hash на основе его id
я что то не представляю что даст в множество hash экземпляров и как получить нужный без цикла
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
27.03.2021, 19:26
Semen-Semenich, это я поспешил, невнимательно прочитав задачу, почему то подумал что нужно только проверить наличие такого объекта, а не получить его
0
 Аватар для Semen-Semenich
5226 / 3472 / 1174
Регистрация: 21.03.2016
Сообщений: 8,299
27.03.2021, 19:27
Welemir1, ну теперь все стало понятно
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
28.03.2021, 12:52
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
соберите в словарь где ключ ID а значение экземпляр. список в любом случае нужно будет проверять в цикле
Вы правы, что нужно создать словарь. Однако ID должен содержать хешируемые объекты (требование для создания словаря), например уникальные числа или уникальные строки.
Semen-Semenich, Под циклом Вы как я понимаю имеете ввиду цикл, который потребуется только один раз для формирования словаря. После того, как словарь будет сформирован, циклы больше не понадобятся. Значение можно будет получать по ключу в словаре, который быстро находит нужный объект используя хеширование.
GavNoKoder, Как я понимаю ID Вы формируете сами, так как создаваемый в питоне идентификатор id (адрес объекта в памяти) существует только на время сеанса.
0
 Аватар для Semen-Semenich
5226 / 3472 / 1174
Регистрация: 21.03.2016
Сообщений: 8,299
28.03.2021, 14:04
Цитата Сообщение от Viktorrus Посмотреть сообщение
Однако ID должен содержать хешируемые объекты (требование для создания словаря), например уникальные числа или уникальные строки
ну на то он и ID что бы быть уникальным. я имел ввиду что цикл нужен будет при поиске по ID из списка а для словаря при создании цикл не нужен. создали экземпляр добавили в словарь
Python
1
dct[ID] = object
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
28.03.2021, 14:17
Цитата Сообщение от Viktorrus Посмотреть сообщение
Однако ID должен содержать хешируемые объекты (требование для создания словаря)
Чет tuple содержит хешируемые объекты (корректно называть их иммутабельными), но при этом это недостаточное требование: он может содержать также и нехешируемые объекты (мутабельные). В первом случае его можно использовать в качестве ключа словаря, во втором - нет.
/upd
В обоих случаях хеш у кортежа есть, просто он кидает TypeError на нехешируемые объекты в своем представлении (на мутабельные объекты).
/upd2
А вообще можно написать свою обертку над ID - переопределить def __hash__(self): и клади что хочешь.
P. S. Насчет def __eq__(self, other): не уверен, но скорее всего и его тоже надо определить.
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
28.03.2021, 15:27
Arsegg, Если в качестве ключа берутся не только целые числа и строки, и при этом есть не уверенность является ли объект хешируемым, как например когда в качестве ключа используется экземпляр класса, который может быть как хешируемым, так и не хешируемым, то в этом случае просто перед использованием объекта, нужно проверять его на хешируемость с помощью функции hash().
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
28.03.2021, 16:19
Цитата Сообщение от Viktorrus Посмотреть сообщение
то в этом случае просто перед использованием объекта, нужно проверять его на хешируемость с помощью функции hash().
Я ж вроде указывал, что в пользовательском классе его можно переопределить и "терять" (ключ) в коллекции (словарь, множество), т. е. если хеш объекта (ключа) меняется в рантайме, то ключ имеет свойство "теряться".
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
29.03.2021, 15:41
Arsegg, Тогда, как вариант, Ваше предложение использовать обертку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.03.2021, 15:41
Помогаю со студенческими работами здесь

Как получить ссылку на текущий экземпляр класса внутри этого класса?
Как? Чтобы отрабатывал деструктор! и в нем можно было поиметь этот this ... Идея в том, что пишу оболочку под некоторую существующую...

Как создать экземпляр класса для нестатического поля DataGridView?
У меня есть статический метод, в классе Form1 в котором я хочу добавить строку в DataGridView, метод должен быть обязательно статическим, я...

Как можно создать экземпляр класса по его имени
Допустим у меня есть класс от которого порождены несколько классов и как из родительского класса создать экземпляр дочернего класса имея...

Как получить ссылку на экземпляр класса активности из ресивера
Имеется ресивер, в нем объявлен интерфейс. Его методы определяется в MainActivity. Необходимо произвести обратный возов метода интерфейса....

Как обратится к переменной из другого класса, не создавая его экземпляр?
Добрый день. Подскажите, как обратится к переменной из другого класса, не создавая его экземпляр?


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru