Python跨类调用函数报错,如何正确创建类并实现方法调用?
核心错误原因
- 类加载顺序错误:
MainMenu类定义里的代码会在类被加载时立刻执行,这时候Options类还没定义,自然找不到这个类。 - 方法调用语法错误:
chosenOption是用户输入的字符串,拿它来调用Options类的方法完全不符合Python语法。 - 类结构设计混乱:把程序执行逻辑直接写在类定义的顶层,而不是放在类的方法里。
修复后的完整代码
# 先定义Options类,确保后续调用时类已存在 class Options: def issuing_new_ticket(self): print("Issuing new ticket in progress") ticket_title = input("Title of the ticket: ") ticket_description = input("Describe the issue/request: ") print(f"Ticket '{ticket_title}' created successfully!") def check_ticket_status(self): print("Checking ticket status...") # 这里可以补充查询逻辑 def edit_ticket(self): print("Editing ticket...") # 这里可以补充编辑逻辑 class MainMenu: def __init__(self): # 实例化Options类,后续通过这个实例调用方法 self.options_handler = Options() self.show_menu() def show_menu(self): while True: print("\nWelcome to Ticket Tracker") print("Main Menu") print("1 - Issue new Ticket") print("2 - Check Ticket Status") print("3 - Edit Ticket") print("4 - Exit") chosen_option = input("Enter your choice here: ") # 根据用户选择调用对应方法 if chosen_option == "1": self.options_handler.issuing_new_ticket() elif chosen_option == "2": self.options_handler.check_ticket_status() elif chosen_option == "3": self.options_handler.edit_ticket() elif chosen_option == "4": print("Exiting...") break else: print("Invalid choice, please enter 1-4") # 启动程序 if __name__ == "__main__": MainMenu()
关键修复点
- 调整类定义顺序:先写
Options类,保证MainMenu调用时能找到它。 - 重构类结构:把菜单逻辑放进
show_menu()方法,通过__init__初始化时启动,避免类加载时直接执行代码。 - 正确实例化类:在
MainMenu里创建Options的实例,通过实例调用方法,这是Python中调用实例方法的标准方式。 - 添加循环逻辑:让菜单可以重复操作,直到用户选择退出。
- 修正变量拼写:把
ticketDescribtion改成符合规范的ticket_description。 - 移除无用全局变量:用类实例和方法内部变量替代全局变量,避免全局变量带来的耦合问题。
内容的提问来源于stack exchange,提问作者MichalS
相关产品推荐
相关产品推荐

