Хранение объектов словаря с использованием полок Python

Я пытаюсь внедрить систему еженедельного расписания врача. Я хотел бы знать, как использовать полку для хранения объектов словаря. Было бы здорово, если бы кто-нибудь мог просмотреть мой код и подсказать, как я могу его улучшить. Как я могу хранить словарь временных интервалов на полках? (Я добавил объекты понедельник, вторник, среду, четверг и пятницу в словарь временных интервалов, и теперь я не уверен, как хранить эти объекты в словаре на полках.)

class default_timeslots:
    def __init__(self,day,time):
        self.__day = day
        self.__time = time

class Store:
    timeslots = {}
    def __init__(self):
        if len(__class__.timeslots) <= 0:
            self.create_default_timeslots()

    def create_default_timeslots(self):
        Monday = default_timeslots('Mon',time = {"8:00","9:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00"})
        Tuesday = default_timeslots('Tue',
                                   time = {"8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00",
                                             "17:00", "18:00"})
        Wednesday = default_timeslots('Wed',
                                   time = {"8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00",
                                             "17:00", "18:00"})
        Thursday = default_timeslots('Thursday',
                                   time = {"8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00",
                                             "17:00", "18:00"})
        Friday = default_timeslots('Friday',
                                   time = {"8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00",
                                             "17:00", "18:00"})

        Store.timeslots[Monday.day] = Monday
        Store.timeslots[Tuesday.day] = Tuesday
        Store.timeslots[Wednesday.day] = Wednesday
        Store.timeslots[Thursday.day] = Thursday
        Store.timeslots[Friday.day] = Friday

Отказ от ответственности Я новичок в питоне и полках.

Спасибо за помощь!

Что именно тебе здесь нужно? Пожалуйста, будьте ясны, так как ваш вопрос слишком общий.

ycx 17.12.2018 16:29

извините, плохо, я новичок в переполнении стека. Я пытался спросить, как я могу хранить словари - временные интервалы на полках, поскольку я добавил объекты понедельника, вторника, среды, четверга и пятницы в словарь - временные интервалы. Я не уверен, как мне хранить эти предметы, которые есть в словаре, на полках.

user10801874 17.12.2018 16:36

Что такое полка? Он нигде не упоминается в вашем коде.

ycx 17.12.2018 16:38

я думаю, что он имеет в виду docs.python.org/3/library/shelve.html

Corentin Limier 17.12.2018 16:39

да, я имел в виду это

user10801874 17.12.2018 16:42
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
122
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я исправил ваш код, так как он не запускается:

class default_timeslots:
    def __init__(self,day,time):
        self.day = day
        self.time = time

class Store:
    def __init__(self):
        self.timeslots = {}
        self.create_default_timeslots()

    def create_default_timeslots(self):
        Monday = default_timeslots('Mon',time = {"8:00","9:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00"})
        Tuesday = default_timeslots('Tue',
                                   time = {"8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00",
                                             "17:00", "18:00"})
        Wednesday = default_timeslots('Wed',
                                   time = {"8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00",
                                             "17:00", "18:00"})
        Thursday = default_timeslots('Thursday',
                                   time = {"8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00",
                                             "17:00", "18:00"})
        Friday = default_timeslots('Friday',
                                   time = {"8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00",
                                             "17:00", "18:00"})

        self.timeslots[Monday.day] = Monday
        self.timeslots[Tuesday.day] = Tuesday
        self.timeslots[Wednesday.day] = Wednesday
        self.timeslots[Thursday.day] = Thursday
        self.timeslots[Friday.day] = Friday

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

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

Similarly, when class instances are pickled, their class’s code and data are not pickled along with them. Only the instance data are pickled. This is done on purpose, so you can fix bugs in a class or add methods to the class and still load objects that were created with an earlier version of the class

Чтобы создать полку:

import shelve
store = Store()
output_shelve = shelve.open('test')
output_shelve['store'] = store
output_shelve.close()

Чтобы читать с полки:

input_shelve = shelve.open('test')
store = input_shelve['store']

Конечно, вам нужно импортировать класс Store, когда вы пытаетесь читать с полки (если это не в том же скрипте).

store.timeslots['Mon'].time

вернусь :

{'10:00',
 '11:00',
 '12:00',
 '13:00',
 '14:00',
 '15:00',
 '16:00',
 '17:00',
 '18:00',
 '8:00',
 '9:00'}

Вам следует уйти от ПОЛКИ и других хранилищ текстовых данных. Вместо этого используйте SQLITE3, конвертируйте свой словарь в формат json и сохраните его в базе данных.

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

Если вам нужно фактическое индексированное хранилище JSON, Postgres - еще один вариант, который идеально подходит для этой ситуации.

Другие вопросы по теме