我遇到一种情况,我需要强制并向用户提供多个选择函数之一的选项,将其作为参数传递给另一个函数:
我真的想实现如下所示的功能:|| |因此可以执行以下命令:
from enum import Enum
#Trivial Function 1
def functionA():
pass
#Trivial Function 2
def functionB():
pass
#This is not allowed (as far as i can tell the values should be integers)
#But pseudocode for what I am after
class AvailableFunctions(Enum):
OptionA = functionA
OptionB = functionB
So the following can be executed:
def myUserFunction(theFunction = AvailableFunctions.OptionA):
#Type Check
assert isinstance(theFunction,AvailableFunctions)
#Execute the actual function held as value in the enum or equivalent
return theFunction.value()
你可以使用字典将枚举成员与函数关联起来。 以下是如何实现的:
from enum import Enum
# Trivial Function 1
def functionA():
print("Executing functionA")
# Trivial Function 2
def functionB():
print("Executing functionB")
class AvailableFunctions(Enum):
OptionA = "A"
OptionB = "B"
# 创建一个字典,将枚举成员映射到函数
_function_map = {
"A": functionA,
"B": functionB
}
def get_function(self):
"""返回与枚举成员关联的函数。"""
return self._function_map[self.value]
def myUserFunction(theFunction=AvailableFunctions.OptionA):
# 类型检查
assert isinstance(theFunction, AvailableFunctions)
# 获取并执行与枚举成员关联的函数
function_to_execute = theFunction.get_function()
return function_to_execute()
# 调用示例
myUserFunction(AvailableFunctions.OptionA) # 输出:Executing functionA
myUserFunction(AvailableFunctions.OptionB) # 输出:Executing functionB
解释:
-
枚举类
AvailableFunctions
: 我们定义了一个标准的枚举类,其中每个成员都有一个字符串值("A" 和 "B")。 -
_function_map
字典: 我们在枚举类中创建了一个私有字典_function_map
。这个字典将枚举成员的值("A" 和 "B")映射到相应的函数 (functionA
和functionB
)。 -
get_function()
方法: 我们定义了一个方法get_function()
,它根据枚举成员的值从_function_map
字典中检索相应的函数并返回。 -
myUserFunction()
: 这个函数现在使用get_function()
方法来获取与传递的枚举成员关联的函数,然后执行该函数。
通过这种方式,你可以有效地将函数与枚举成员关联起来,并在需要时调用它们。
标签:python,function,enums From: 40338652