回顾一下装饰器
Python的装饰器语法想必大家都不陌生,所谓装饰器其实就是一个“函数增强器”,可以理解为输入一个函数对象,输出一个函数对象的函数。如果你的项目中需要在不更改一个函数函数体的前提下给这个函数增加额外的功能,那么就可以使用装饰器来完成。
举个简单的例子,我们的项目中目前有这么几个函数:
def add(a : int, b : int):
return a + b
def multiply(a : int, b : int):
return a * b
def minus(a : int, b : int):
return a - b
我们现在希望无论在什么地方调用它们,都在控制台用黄色字体打印被调用函数的函数名。那么通过装饰器就可以轻松完成,我们首先需要实现装饰器函数:
def printFuncName(func):
def decorator(*args, **kwargs):
print(f"\033[33mcall {func.__name__}\033[0m")
return func(*args, **kwargs)
return decorator
然后我们将这个函数套在之前的三个函数上,以装饰器的形式“增强”这三个函数,并调用:
@printFuncName
def add(a : int, b : int):
return a + b
@printFuncName
def multiply(a : int, b : int):
return a * b
@printFuncName
def minus(a : int, b : int):
return a - b
print(add(1, 2))
print(multiply(1, 2))
print(minus(1, 2))
out:
call add
3
call multiply
2
call minus
-1
由于知乎的文本框不是富文本编辑器,故原本五颜六色的输出这边都是一个颜色。=_=
而接下来我们就需要利用Python的装饰器语法完成函数/类的注册。
完成函数/类的注册
在Python中什么是函数和类的注册呢?这个问题我没有找到特别术语的解释,我结合个人的项目经历通俗讲讲我对注册的理解吧。如果你的项目中有许多可能会随处用到的函数和类,你希望把所有的这些指定的函数和类整合到一个字典(字典的key是函数名,类名或者自定义的名字,value是对应的函数对象或者类)中,那么这样一个过程称为注册。如果我将一个函数放入了这个字典中,那么就称完成了对该函数的注册。
这玩意儿的出现不是什么好玩的语法