首页 > 解决方案 > 使用 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和书架的初学者。

感谢您的帮助!

标签: pythonshelve

解决方案


我修复了您的代码,因为它没有运行:

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

推荐阅读