如何从枚举动态创建函数变量?

2024-10-04 03:27:18 发布

您现在位置:Python中文网/ 问答频道 /正文

假设有一个类定义了几个标准函数,其中一个函数是启动命令的函数。这里有两个例子:

Ser.Cmd(CmdEnum.MoveAbsolute,10,20,'Ack')
Ser.Cmd(CmdEnum.MoveRelative,5,0,'Ack')

其中,CmdEnum.MoveAbsolute和CmdEnum.MoveRelative是要执行的特定命令的枚举值

在这个类中还有其他的“通用”函数,比如Ser.enable或Ser.getstatus

如果命令的语法可以更改为:

Ser.MoveAbsolute(10,20,'Ack')

是否可以通过在对象创建期间传递枚举类型来创建此样式的函数

有人能举个例子吗

其思想是不要在类中硬编码“.MoveAbsolute”部分,而是根据传递的枚举值指定


Tags: 对象函数命令cmd标准定义enable语法
2条回答

您不需要枚举,因为您可以直接指示函数:

所以不是:

Ser.Cmd(CmdEnum.MoveAbsolute,10,20,'Ack')
Ser.Cmd(CmdEnum.MoveRelative,5,0,'Ack')

可能会称之为:

Ser.MoveAbsolute(10,20,'Ack')

你可以写:

Ser.Cmd(Ser.MoveAbsolute,10,20,'Ack')

但是Cmd的实现是:

def Cmd(self, func, *args):
    func(*args)

您可以使用functools.partial函数来实现这一点

import functools

class MySer(Ser):
    def __init__(self):
        self.MoveAbsolute = functools.partial(self.Cmd, CmdEnum.MoveAbsolute)
        self.MoveRelative = functools.partial(self.Cmd, CmdEnum.MoveRelative)

现在可以这样调用函数:

ser = MySer()
ser.MoveAbsolute(10, 20, 'Ack')

相关问题 更多 >