Я пишу небольшую программу, которая использует рассол, чтобы люди могли локально сохранять свое расписание / платежную ведомость на свой компьютер.
У меня есть следующий класс:
class ScheduleDataService:
def create_object_path(self, active_user):
users_object_path = root / "user_objects" / active_user
return users_object_path
def save_users_schedule(self, users_schedule, users_object_path, active_user):
schedule = open(users_object_path, "wb")
pickle.dump(users_schedule, schedule)
schedule.close()
logger.debug("\nYour schedule has been successfully saved \n")
logger.info(active_user + "has successfully saved their schedule.")
def load_users_schedule(self, active_user):
users_object_path = self.create_object_path(active_user)
schedule = open(users_object_path, "rb")
users_schedule = pickle.load(schedule)
schedule.close()
return users_schedule
Внутри этого класса я вызываю функцию класса "create_object_path" внутри функции класса "load_users_schedule".
Внутри того же модуля у меня есть второй класс, используемый для просмотра текущего расписания пользователей:
class ViewSchedule:
__schedule_data_service: ScheduleDataService
def __init__(self, schedule_data_service):
self.__schedule_data_service = schedule_data_service
def view_day(self, day_to_see, active_user):
users_schedule = self.__schedule_data_service.load_users_schedule(self, active_user)
to_view = []
if day_to_see == "1":
to_view.append("Monday")
elif day_to_see == "2":
to_view.append("Tuesday")
elif day_to_see == "3":
to_view.append("Wednesday")
elif day_to_see == "4":
to_view.append("Thursday")
elif day_to_see == "5":
to_view.append("Friday")
elif day_to_see.lower() == "all":
to_view = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
else:
logger.debug("Sorry that isn't a valid option please try again")
logger.info(active_user + "failed to view " + day_to_see + " from their schedule due to incorrect input")
pass
for day in users_schedule.week:
if day.name in to_view:
logger.debug("")
for session in day.sessions:
logger.debug("Day: " + day.name + " Class Code: " + session.code + " Class length: "
+ session.length)
logger.debug("")
Я пытаюсь дать этому классу собственный экземпляр вышеупомянутого класса.Затем я пытаюсь вызвать функцию «load_users_schedule» для загрузки расписания пользователей.Когда я делаю это, я получаю следующую ошибку:
File "generator.py", line 116, in <module>
ViewSchedule(ScheduleDataService).view_day(day_to_see, active_user)
File "/shared/projects/pay_sheet_generator/schedule_data.py", line 249, in view_day
users_schedule = self.__schedule_data_service.load_users_schedule(self, active_user)
File "/shared/projects/pay_sheet_generator/schedule_data.py", line 40, in load_users_schedule
users_object_path = self.create_object_path(active_user)
AttributeError: 'ViewSchedule' object has no attribute 'create_object_path'
Когда я удаляю «create_object_path» из «load_users_schedule» и запускаю их независимо, код работает без проблем.То, что я ищу, это способ встраивать функции друг в друга, как показано выше, или объяснение, почему я не должен это делать.
Редактировать:
вызов ViewSchedule выглядит следующим образом
ViewSchedule(ScheduleDataService).view_day(day_to_see, active_user)