Хранение объектов словаря с использованием полок Python - PullRequest
0 голосов
/ 17 декабря 2018

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

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

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

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

0 голосов
/ 17 декабря 2018

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

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'}
...