Я пытаюсь внедрить систему еженедельного расписания врача. Я хотел бы знать, как использовать полку для хранения объектов словаря. Было бы здорово, если бы кто-нибудь мог просмотреть мой код и подсказать, как я могу его улучшить. Как я могу хранить словарь временных интервалов на полках? (Я добавил объекты понедельник, вторник, среду, четверг и пятницу в словарь временных интервалов, и теперь я не уверен, как хранить эти объекты в словаре на полках.)
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
Отказ от ответственности Я новичок в питоне и полках.
Спасибо за помощь!
извините, плохо, я новичок в переполнении стека. Я пытался спросить, как я могу хранить словари - временные интервалы на полках, поскольку я добавил объекты понедельника, вторника, среды, четверга и пятницы в словарь - временные интервалы. Я не уверен, как мне хранить эти предметы, которые есть в словаре, на полках.
Что такое полка? Он нигде не упоминается в вашем коде.
я думаю, что он имеет в виду docs.python.org/3/library/shelve.html
да, я имел в виду это
Я исправил ваш код, так как он не запускается:
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 - еще один вариант, который идеально подходит для этой ситуации.
Что именно тебе здесь нужно? Пожалуйста, будьте ясны, так как ваш вопрос слишком общий.