Python修饰符是一种特殊的语法,用于修改函数或类的行为。它们允许开发者在不修改原始代码的情况下,动态地增加或者改变函数或类的功能。修饰符通常通过装饰器函数实现,装饰器函数会接收一个函数或者类作为参数,并返回一个新的函数或类。
一、装饰函数
1、装饰器函数的基本使用
def decorator_func(func):
def wrapper():
print("Before function execution")
func()
print("After function execution")
return wrapper
@decorator_func
def my_function():
print("Inside original function")
my_function()
上述代码中,`decorator_func`是一个装饰器函数,它接收一个函数作为参数并返回一个新的函数。使用`@decorator_func`语法将装饰器应用在`my_function`函数上,使得在调用`my_function`时会执行装饰器函数。
2、带参数的装饰器函数
def decorator_func_with_args(arg1, arg2):
def decorator_func(func):
def wrapper():
print(f"Before function execution with arguments: {arg1}, {arg2}")
func()
print(f"After function execution with arguments: {arg1}, {arg2}")
return wrapper
return decorator_func
@decorator_func_with_args("arg1_value", "arg2_value")
def my_function():
print("Inside original function")
my_function()
上述代码中,`decorator_func_with_args`是一个带参数的装饰器函数,它接收两个参数`arg1`和`arg2`,并返回一个装饰器函数。使用`@decorator_func_with_args("arg1_value", "arg2_value")`语法将装饰器应用在`my_function`函数上,传递参数给装饰器函数,使得在调用`my_function`时会执行带参数的装饰器函数。
二、装饰类
1、装饰器类的基本使用
class DecoratorClass:
def __init__(self, func):
self.func = func
def __call__(self):
print("Before function execution")
self.func()
print("After function execution")
@DecoratorClass
def my_function():
print("Inside original function")
my_function()
上述代码中,`DecoratorClass`是一个装饰器类,它接收一个函数作为参数,并在`__call__`方法中定义装饰器的逻辑。使用`@DecoratorClass`语法将装饰器应用在`my_function`函数上,使得在调用`my_function`时会执行装饰器类的`__call__`方法。
2、带参数的装饰器类
class DecoratorClassWithArgs:
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
def __call__(self, func):
def wrapper():
print(f"Before function execution with arguments: {self.arg1}, {self.arg2}")
func()
print(f"After function execution with arguments: {self.arg1}, {self.arg2}")
return wrapper
@DecoratorClassWithArgs("arg1_value", "arg2_value")
def my_function():
print("Inside original function")
my_function()
上述代码中,`DecoratorClassWithArgs`是一个带参数的装饰器类,它接收两个参数在`__init__`方法中初始化,并在`__call__`方法中定义装饰器的逻辑。使用`@DecoratorClassWithArgs("arg1_value", "arg2_value")`语法将装饰器应用在`my_function`函数上,传递参数给装饰器类,使得在调用`my_function`时会执行带参数的装饰器类的`__call__`方法。
三、总结
Python修饰符是一种能够动态修改函数或类的行为的语法。通过使用装饰器函数或装饰器类,我们可以在不修改原始代码的情况下,增加、修改函数或类的功能。装饰器函数接收一个函数或类作为参数,并返回一个新的函数或类;装饰器类接收一个函数作为参数,并通过`__call__`方法定义装饰器的逻辑。在实际开发过程中,我们可以根据需求选择合适的装饰器来提高代码的可复用性和可扩展性。