Python 3.5中如何让菜单函数返回经多函数处理后的类实例
Python 3.5 菜单驱动的自定义类实例处理方案
嘿,我懂你现在的需求——用Python 3.5写个菜单驱动的小工具,把用户选的选项存在自定义类的实例里,还要在各个菜单函数之间传递这个实例,最后拿到处理完的版本对吧?我给你写个完整的可运行示例,你可以照着调整:
第一步:定义存储选项的自定义类
先创建一个类来封装所有用户选择的选项,这样不管多少菜单,都只需要传递这个实例,逻辑更清晰:
class UserOptions: def __init__(self): self.main_choice = None # 存储主菜单选择的功能 self.detail_settings = {} # 存储子菜单的详细设置
第二步:编写菜单函数(主菜单+子菜单)
每个菜单函数都接收UserOptions实例作为参数,修改实例属性后再返回它,确保所有修改能在函数间传递:
主菜单函数
def main_menu(options): while True: print("\n=== 主菜单 ===") print("1. 选择图片处理功能") print("2. 选择文本处理功能") print("3. 查看当前已选选项") print("4. 退出并返回最终设置") user_input = input("请输入你的选择(1-4):") if user_input == "1": # 调用子菜单,更新实例并接收返回的新版本 options = image_process_submenu(options) elif user_input == "2": options = text_process_submenu(options) elif user_input == "3": show_current_options(options) elif user_input == "4": print("退出菜单,当前设置已保存!") return options # 返回处理后的实例 else: print("输入无效,请重新选择!")
图片处理子菜单
def image_process_submenu(options): print("\n=== 图片处理子菜单 ===") print("A. 压缩图片") print("B. 调整分辨率") sub_choice = input("请选择处理类型(A/B):").upper() if sub_choice == "A": options.main_choice = "图片压缩" quality = input("请输入压缩质量(1-100):") try: options.detail_settings["compression_quality"] = int(quality) print(f"已设置图片压缩质量为{quality}%") except ValueError: print("输入不是有效数字,返回主菜单") elif sub_choice == "B": options.main_choice = "分辨率调整" width = input("请输入目标宽度:") height = input("请输入目标高度:") try: options.detail_settings["resolution"] = (int(width), int(height)) print(f"已设置分辨率为{width}x{height}") except ValueError: print("输入不是有效数字,返回主菜单") else: print("无效选择,返回主菜单") return options # 返回修改后的实例
文本处理子菜单
def text_process_submenu(options): print("\n=== 文本处理子菜单 ===") encoding = input("请选择文本编码(UTF-8/GBK):").upper() if encoding in ["UTF-8", "GBK"]: options.main_choice = "文本编码转换" options.detail_settings["target_encoding"] = encoding print(f"已设置目标编码为{encoding}") else: print("无效编码选择,返回主菜单") return options
查看当前选项的辅助函数
def show_current_options(options): print("\n=== 当前已选设置 ===") print(f"主功能:{options.main_choice if options.main_choice else '未选择'}") print(f"详细设置:{options.detail_settings if options.detail_settings else '无'}")
第三步:启动程序
在主程序里初始化实例,调用主菜单,最后拿到处理后的实例:
if __name__ == "__main__": # 初始化空的选项实例 user_options = UserOptions() # 启动主菜单,获取最终处理后的实例 final_options = main_menu(user_options) # 这里可以对final_options做后续操作,比如保存到文件、执行对应功能等 print("\n最终保存的设置:") print(f"主功能:{final_options.main_choice}") print(f"详细设置:{final_options.detail_settings}")
关键注意点
- 所有菜单函数都必须返回修改后的实例:因为Python中对象是引用传递,但如果在函数内部重新赋值实例(比如
options = UserOptions()),就会断开和外部的引用,所以最好的方式是修改实例属性后返回它,确保外部能拿到最新的状态。 - 用
while True循环保持菜单持续运行,直到用户选择退出,才返回最终实例。 - 加入了输入验证和异常处理,避免程序因为无效输入崩溃,提升用户体验。
内容的提问来源于stack exchange,提问作者SalutAToi
相关产品推荐
相关产品推荐

