Здравствуйте! Подскажите, пожалуйста, как устроено данное меню? Какие конструкции использованы? В частности особенно непонятно, как строится соответствие пунктов меню и вызываемых методов. Как устроен класс Calc понятно. Непонятно, как связаны между собой классы Menu и Params и как устроен каждый из них внутри.
Заранее благодарю за понятный и развёрнутый ответ в виде текста или, может быть, комментариев к коду. Код прикрепила.
Заранее благодарю за понятный и развёрнутый ответ в виде текста или, может быть, комментариев к коду. Код прикрепила.
Python:
class Menu():
""" Класс меню """
def __init__(self, params):
self.params = params
self.commands = {
"0": ("ВЫХОД", lambda: exit())
}
self.commands.update(self.params.commands)
self.errors = {
"0": ("", lambda: print("Неправильный пункт меню"))
}
def PrintMenu(self):
while (True):
print()
print("_______________________М Е Н Ю_______________________")
for k, v in self.commands.items():
print(f"{k} - {v[0]}")
print()
enter = input("Введите номер пункта меню: ")
print()
self.commands.get(enter, self.errors["0"])[1]()
print()
class Calc():
"""Класс калькулятор"""
def add(self):
a = float(input("Введите первое число: "))
b = float(input("Введите второе число: "))
print("Сумма чисел равна:", a + b)
def sub(self):
a = float(input("Введите первое число: "))
b = float(input("Введите второе число: "))
print("Разность чисел равна:", a - b)
def mul(self):
a = float(input("Введите первое число: "))
b = float(input("Введите второе число: "))
print("Произведение чисел равно:", a * b)
class Params():
"""Класс с данными для меню"""
def __init__(self):
self.c = Calc()
self.commands = {
"1": (
"узнать сумму введенных чисел ",
lambda: self.c.add()
),
"2": (
"узнать разность введенных чисел ",
lambda: self.c.sub()
),
"3": (
"узнать произведение введенных чисел ",
lambda: self.c.mul()
)
}
p = Params() # экземпляр класса с данными для меню
menu = Menu(p) # экземпляр класса меню
menu.PrintMenu() # вывод меню в консоль