Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
 Аватар для Semen-Semenich
5232 / 3477 / 1175
Регистрация: 21.03.2016
Сообщений: 8,305

Класс: вложенность экземпляров в экземпляр

29.08.2020, 21:05. Показов 1511. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
добрый день. есть такая последовательная структура
Python
1
2
3
4
5
6
7
8
class Block:
 
    def __init__(self, title, value):
        self.title = title
        self.value = value
 
    def get_block(self):
        return self.title, self.value
дальше бокс который хранит имя экземпляра и в списке экземпляры класса блок
Python
1
2
3
4
5
6
7
8
9
class Box:
    
    def __init__(self, name):
        self.name = name
        self.list_block = []
 
    def add_block(self, block):
    ''' метод добавляет экземпляр класса блок'''
        self.list_block.append(block)
и наконец пользователь который хранит в списке экземпляры класса бокс со своими списками из блок
Python
1
2
3
4
5
6
7
8
class Client:
    
    def __init__(self,name):
        self.name = name
        self.data = []
 
    def add_data(self, box):
        self.data.append(box)
получается такой список
[Client[box[block,block]], Client[box[block,block],box[block,block]], Client[box[block,block],box[block,block],box[block,block]]]
мне нужно изменить данные у клиента с именем х в блоке с именем у в блоге с заголовком ху.
пример решения.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
name = ['name', 'name_1', 'name_2']
list_client = [Client(n,p) for n,p in zip(name,passw)]
box_name = ['one', 'two', 'three']
 
 
for client in list_client:
    for name in box_name:
        box = Box(name)
        
        for block_data in (['data', 'val'],['data_1', 'val_1'],['data_2','val_2']):
            block = Block(*block_data)
            box.add_block(block)
        client.add_data(box)
 
 
print('\n#########################################\n')
 
def info(client):
    print(' ',client.name, client.passw)
    for box in client.data:
        print('   ',box.name)
        for block in box.list_block:
            print('     ',block.get_block())  
    print('\n#########################################\n')
 
for client in list_client:
    info(client)
 
# замена блока пользователя в боксе с заданным именем
for i, person in enumerate(list_client):
    if person.name == 'name_1':
        person = list_client[i] 
        for j, box in enumerate(person.data):
            if box.name == 'three':
                box = person.data[j]
                for x, block in enumerate(box.list_block):
                    if block.title == 'data_2':
                        box.list_block[x] = Block('nev_title', 'nev_val')
                        
 
for client in list_client:
    info(client)
вопрос есть ли путь короче? (словари не предлагать. требуется упорядочное расположение)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.08.2020, 21:05
Ответы с готовыми решениями:

В головной функции требуется создать один статический экземпляр описанного типа и массив из n динамических экземпляров э
Есть программа #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<stdio.h> struct Progr { double first; double...

Класс, считающий количество созданных экземпляров
Всем привет! Дали задание написать класс, считающий количество созданных объектов класса с перегрузом оператора + и деструктором... ...

Включение в класс экземпляров другого класса
Необходимо разработать программу на языке C++, в которой будет определено и реализовано два класса из варианта задания. Во первом классе...

24
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
31.08.2020, 21:15
Студворк — интернет-сервис помощи студентам
https://metanit.com/python/tutorial/4.6.php
проще и ключи сразу есть

Добавлено через 9 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> import shelve
>>> with shelve.open('st.dat') as f:
    f['Vic'] = {'url':'mail.ru','login':'noname','pass':'blabla'}
    f['Nick'] = {'url':'mail.ru','login':'noboby','pass':'blablabla'}
    
>>> f.close()
>>> f = shelve.open('st.dat')
>>> list(f.keys())
['Vic', 'Nick']
>>> f['Vic']
{'url': 'mail.ru', 'login': 'noname', 'pass': 'blabla'}
>>> f['Nick']
{'url': 'mail.ru', 'login': 'noboby', 'pass': 'blablabla'}
>>>
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
31.08.2020, 21:55
Semen-Semenich, Теперь понятно и с этим уже можно работать.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
01.09.2020, 19:05
Semen-Semenich, вообще pickle/shelve описаны как небезопасные - возвращают обьекты питона.
я бы сделал чисто байтовые данные
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import shelve
import json
import base64
 
'''
формат данных - [[url,login,password],[url,login,password],...]
'''
 
def crypto(obj):
    return base64.b85encode(json.dumps(obj).encode())
 
def encrypto(value):
    return json.loads(base64.b85decode(value))
    
with shelve.open('pass.dat') as db:
    
    db['Vic'] = crypto([
                ['mail.ru','vic','blabla'],
                ['list.ru','vic1','bla bla'],
                ['ya.ru','VicT','bla'],
                ])
    db['Joe'] = crypto([
                ['mail.ru','joe','блаблабла'],
                ['list.ru','joE','парол'],
                ])
    
db.close()
 
 
with shelve.open('pass.dat') as f:
    for key,value in f.items():
        print(key,value)
        print(key,encrypto(value))
0
 Аватар для Semen-Semenich
5232 / 3477 / 1175
Регистрация: 21.03.2016
Сообщений: 8,305
01.09.2020, 21:50  [ТС]
.vic5710, спасибо просмотрю. у меня задача была шифровать все данные что будут хранить экземпляры своей функцией шифрования (для себя нормально посторонний пользователь не прочитает файл без логина и пароля). попробую ваш вариант.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
02.09.2020, 00:11
ну тут base64 для примера.
простенький шыфр
https://www.cyberforum.ru/pyth... st11639782
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.09.2020, 00:11
Помогаю со студенческими работами здесь

Добавление экземпляров одного класса в другой класс
Доброе утро! В программе создано 2 класса. 1-й предназначен для создания объекта под названием "студент". Он имеет различные...

Передать в класс список экземпляров другого класса
подскажите пожалуйста как это реализовать? есть класс: public class Timefr60 { public DateTime Time; ...

Создать класс "А," представляющий собой класс, который в виде параметра должен принимать экземпляр другого класса
Создать класс "А," представляющий собой класс, который в виде параметра должен принимать экземпляр другого класса, в соответствии с Вашей...

Реализовать класс Окружность: Как сравнить поля разных экземпляров?
Прошу прощения, если вопрос глупый, методы вычисляющие длину и площадь криво наверное, но сделал. Не могу понять, как мне обратиться к...

Описать класс с именем Culture и упорядочить вектор экземпляров по цене картины
Описать класс с именем CULTURE, содержащий следующие поля: • название картины; • фамилия и имя художника; • год написания картины;...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
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 https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru