python - 使用 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和书架的初学者。
感谢您的帮助!
解决方案
我修复了您的代码,因为它没有运行:
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'}
推荐阅读
- r - 在列中选择多个字符值以将它们替换为相同的值
- java - 为什么在 JUnit 中测试代码时创建嵌入式 Derby DB 有效,但从 main 方法调用时无效?
- c++ - 如何从 C++ 中的二维向量类型指针访问单个元素
- python - Trying to store a GET Requests to a DataFrame in Pandas, but getting the following error
- laravel - 部署后在 Laravel 网站中导航时找不到 404 请求(路由不起作用)
- mql4 - 在 mql4 中计算账户总盈亏的正确方法?
- python - Python:避免使用会使其他程序崩溃的文件名
- php - 如何使用 Lumen 8.x 获取中间件中的当前路由信息?
- r - 使用 fct_reorder 重新排序列的问题
- python - Jupyter Notebook 从 bash 子进程设置环境变量