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

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

29.08.2020, 21:05. Показов 1558. Ответов 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
964 / 719 / 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
964 / 719 / 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
5239 / 3483 / 1176
Регистрация: 21.03.2016
Сообщений: 8,311
01.09.2020, 21:50  [ТС]
.vic5710, спасибо просмотрю. у меня задача была шифровать все данные что будут хранить экземпляры своей функцией шифрования (для себя нормально посторонний пользователь не прочитает файл без логина и пароля). попробую ваш вариант.
0
964 / 719 / 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
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru