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

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

29.08.2020, 21:05. Показов 1563. Ответов 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,312
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
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru