我想根据用户从主菜单中所做的选择调用执行某些操作(存储在类字典中)的类方法。
def setup_task(user_input, id):
#Object
task_data = TaskData(id)
task_steps = tasks(user_input, task_data)
task_steps()
def tasks(user_input, task_data):
"""
Maps user input/task type to methods
"""
tasks = {
"TaskRed": Red(task_data).setup_red_specific_task,
"TaskYellow": Yellow(task_data).setup_yellow_specific_task
}
return tasks.get(user_input)
这是该课程的外观:
class TaskRed(BaseClass):
def __init__(self, task_data):
super().__init__()
# Used by multiple methods
self.task_data = task_data
def setup_red_specific_task(self):
print("Does something")
这按预期工作。但是,我想避免tasks在一开始就在函数中实例化字典中的所有类。我只想根据 user_input 做一个需要的。如何避免在开始时为所有任务实例化类?
保存"Red(task_data).setup_red_specific_task"为字符串并在调用该方法时使用 eval 有效,但是我想避免这样做。