从初始菜单 python 笔记本应用创建子菜单

Creating a sub-menu from initial menu python notebook app

我在研究继承和class构建时正在制作笔记本应用程序,我想知道是否有更好的方法可以从第一个菜单创建第二个菜单(还没有 GUI,只是命令行)。我们从第一个菜单开始,输入“3”将我们带到另一个菜单。第二个菜单是 class,与第一个菜单几乎相同,唯一的区别是方法 functionality/names。我想知道我是否可以将第二个菜单作为原始菜单的子菜单-class 以避免代码重复?

这是第一个菜单的代码,第二个菜单-class 重复:

"""First menu"""

class Start:

    def __init__(self):
        self.page = Page()
        self.choices = {
            "1": self.write,
            "2": self.erase,
            "3": self.show,
            "4": self.quit,
    }

    def display_menu(self):
        """print some options for the user to select"""
    
    def run(self):
        """Keep display menu running"""
        while True:
            self.display_menu()

    def show(self):
        """call the second menu, which is a class duplicating
        the code of this first menu class"""
        SecondMenu().run_menu()

if __name__ == '__main__':
    Start().run()

要从第二个菜单返回到第一个,第二个菜单中的返回方法调用第一个菜单

"""Second Menu"""

class SecondMenu:
    ...
    ...
    ...
    def back(self):
        Start().run()

提前致谢。如果需要更多说明,请告诉我,我是 oop 原则的新手。

如果将无限循环移至主程序,您可以考虑在每次迭代中实例化并向用户呈现一个新的(或现有的)菜单,直到他从主菜单中选择 Q(uit)

然后你可以定义一个基础 class Menu 只有基础。之后,您可以考虑 MainMenu sub-class,以及您需要的任何更多菜单。

菜单不需要与用户交互,而是与您的程序交互。您的程序基本上是一个循环,要求用户提供菜单选项。

如果您想用其他方式与用户或其他系统交互,但您仍想re-use这些菜单,这种隔离会很有用。

菜单 运行 一切都来自他们自己,虽然可能,但看起来有点像菜单过度设计。

您可能还喜欢标准库中的 cmd 模块。也是object-oriented。不过,您必须阅读 documentation 并遵守其规则。您会在那里找到示例。