gpt4 book ai didi

python - 尝试使用类函数在第二个类中调用该类中的另一个函数时获取 "AttributeError"

转载 作者:行者123 更新时间:2023-12-01 00:47:05 25 4
gpt4 key购买 nike

我正在编写一个小程序,它使用pickle让人们在本地将他们的时间表/工资表保存到他们的计算机上。

我有以下类(class):

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

在这个类中,我在类函数“load_users_schedule”内部调用类函数“create_object_path”。

在同一模块内,我有一个第二类,用于查看用户当前的日程安排:

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'

当我从“load_users_schedule”中删除“create_object_path”并独立运行它们时,代码可以正常工作。我正在寻找的是一种能够将函数嵌入到彼此内部的方法,如上所示,或者解释为什么我不应该这样做。

编辑:

对 ViewSchedule 的调用如下所示

ViewSchedule(ScheduleDataService).view_day(day_to_see, active_user)

最佳答案

您的代码中存在一些问题。

  1. users_schedule = self.__schedule_data_service.load_users_schedule(self, active_user) 行上,您不需要添加 self 作为第一个参数,因为当您使用实例调用类的方法,第一个参数会自动插入该类的实例

  2. 您需要将 ScheduleDataService 实例传递给 ViewSchedule 实例,因此您需要执行 ViewSchedule(ScheduleDataService()) 操作。 view_day(day_to_see, active_user) 而不是 ViewSchedule(ScheduleDataService).view_day(day_to_see, active_user)

  3. 您还应该知道 dunder 变量是 name-mangled在 python 中,因此在你的类中小心使用它们

关于python - 尝试使用类函数在第二个类中调用该类中的另一个函数时获取 "AttributeError",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56880720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com