Хранение объектов словаря с использованием полок 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

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

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


person Community    schedule 17.12.2018    source источник
comment
Что именно вы хотите здесь? Пожалуйста, будьте ясны, так как ваш вопрос слишком широк.   -  person ycx    schedule 17.12.2018
comment
извините, мой плохой, я очень новичок в переполнении стека. Я пытался спросить, как я могу хранить словарь - временные интервалы на полках, поскольку я добавил объекты понедельника, вторника, среды, четверга и пятницы в словарь - временные интервалы. Я не уверен, как я могу хранить эти объекты, которые находятся в словаре, на полках.   -  person    schedule 17.12.2018
comment
Что такое полка? Нигде в вашем коде это не рассматривается.   -  person ycx    schedule 17.12.2018
comment
да я это имел в виду   -  person    schedule 17.12.2018


Ответы (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, и это плохая практика. + Вы пытаетесь получить к ним доступ вне класса. Я убираю подчеркивания.

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

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

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

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'}
person Corentin Limier    schedule 17.12.2018

Вы должны уйти от SHELVES и других текстовых хранилищ данных. Вместо этого используйте SQLITE3 и преобразуйте свой словарь в формат json и сохраните его в базе данных.

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

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

person eatmeimadanish    schedule 17.12.2018