没有实例化的类字典

休息

我想根据用户从主菜单中所做的选择调用执行某些操作(存储在类字典中)的类方法。

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 有效,但是我想避免这样做。

阿洛克·拉吉

我能想到的最简单的方法是返回一个函数实例,并在检索值时执行它,如下所示:-

def tasks(user_input,  task_data):
"""
Maps user input/task type to methods
"""
    tasks = {
        "TaskRed": lambda: Red(task_data).setup_red_specific_task,
        "TaskYellow": lambda: Yellow(task_data).setup_yellow_specific_task
    }
    return tasks.get(user_input)()

为了解释这一点,我编写了以下示例:-

>>> tasks = {"a": lambda: print("23"), "b": lambda: print("34")}

>>> tasks["a"]
<function <lambda> at 0x7fe21fad45e0>

>>> tasks["a"]()
23

如果你在上面看到我们 print tasks["a"],它只给了我们函数实例,并没有实际执行它。但是当我们最后传递“()”时,它实际上执行了该函数并给了我们结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

实例化没有实现类的接口

排序没有实例化的类方法

装饰器调用没有类实例化的类方法?

实例化一个类-有或没有Parens?

没有类实例化的 C# 语法

Bean实例化类的@PostConstruct没有被调用

Java:实例化没有默认构造函数的通用类

没有类型参数的Java通用类实例化

没有类实例化的命名空间方法

字典字典与类实例字典

Python类实例化:在没有附带参数的情况下调用类意味着什么?

GWT序列化-类没有可实例化的子类型

有没有办法在Java中通过名称实例化类?

有没有可以实例化新编写的类的创新设计模式?

Swift - 实例化一个类 - 有括号和没有括号的区别

Android IntentService无法实例化类;没有空的构造函数

实例化抽象类时没有错误,即使未实现抽象方法

C ++类实例未初始化但没有编译错误,为什么

在没有公共构造函数的情况下实例化.NET类

实例化没有构造函数的类并填充仅获取成员

为何包含main方法的类在Java中没有实例化并且仍然可以正常运行?

Android视图模型类没有零参数构造函数,片段中的实例化异常

cppyy 模板类实例化没有虚拟析构函数

在 TypeScript 中没有泛型实例化类时允许任何输入字符串

尝试实例化模板类的对象时出现“没有匹配的构造函数”错误

在没有样板的情况下从IronPython实例化.Net类

我们可以从没有实例化的类中调用方法吗

Python中没有抽象方法的抽象数据类:禁止实例化

为什么在这个实例化类的例子中没有“new”关键字?