Я исправил ваш код, так как он не запускается:
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'}