假设有一个类定义了一些标准函数,其中一个是启动命令的函数。这里有两个例子:
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"在类中硬编码,但是根据传递的枚举值指定。
答案 0 :(得分:1)
您可以使用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')
答案 1 :(得分:0)
您不需要枚举,因为您可以直接指明功能:
所以而不是:
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)