在 Flaks 库中,我们可以使用像 switch case 这样的装饰器。 (我听懂了吗?)
app.route('')
所以...我想用装饰器和参数制作一些 switch 语句,
喜欢:
@color('pink')
def _pink_power(self):
print("wow")
@color('blue')
@color('red')
def _powerpower(self):
print("god!!!!")
def input(color):
I don't know what to do in here..
if color is pink, print wow!
我很长时间都在努力弄清楚这个问题,但我无法做到。你觉得不可能吗?
最佳答案
这是一个相对简单的方法(尽管我建议您在最后更改 input
函数的名称,因为它与同名的内置函数冲突):
class color:
_func_map = {}
def __init__(self, case):
self.case = case
def __call__(self, f):
self._func_map[self.case] = f
return f
@classmethod
def switch(cls, case):
cls._func_map[case]()
@color('pink')
def _pink_power():
print("wow")
@color('blue')
@color('red')
def _powerpower():
print("god!!!!")
def input(colorname):
color.switch(colorname)
input('pink') # -> wow
input('blue') # -> god!!!!
input('red') # -> god!!!!
增强
您可以支持使用默认情况,例如 C/C++ 的 switch
语句支持,当没有匹配的 colorname
时将使用该默认情况:
class color:
DEFAULT = '_DEFAULT'
_func_map = {}
def __init__(self, case):
self.case = case
def __call__(self, f):
self._func_map[self.case] = f
return f
@classmethod
def _default(cls):
raise ValueError('Unknown color!')
@classmethod
def switch(cls, case):
cls._func_map.get(case, cls._default)()
添加到类中的 _default()
方法在调用时会引发异常:
input('lavender') # -> ValueError: Unknown color!
但是,您可以通过定义自己的错误处理函数来覆盖它:
@color(color.DEFAULT) # Override default function.
def my_default():
print("loser!")
input('lavender') # -> loser!
关于python - 使用装饰器参数进行切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53445074/