欢迎访问宙启技术站
智能推送

Python装饰器的基本介绍及用法

发布时间:2023-09-03 19:10:54

Python装饰器是一种高级的编程技术,它可以在不修改代码的情况下,为已经存在的函数或者类添加额外的功能。装饰器本质上是一个返回函数或类的函数。使用装饰器可以实现代码的重用和功能的扩展。

装饰器的基本用法是在函数定义之前添加@符号,然后接着写装饰器的名字。装饰器可以接收一个函数作为参数,并返回一个新的函数或类。这个新的函数或类会包装原来的函数或类,并在其基础上进行扩展。

使用装饰器可以实现一些常见的功能,例如在函数调用前后添加日志、计时、权限验证等。下面是一个示例,演示如何使用装饰器添加日志功能:

def log_decorator(func):
    def wrapper(*args, **kwargs):
        print(f"Calling function {func.__name__}")
        result = func(*args, **kwargs)
        print(f"Function {func.__name__} returned {result}")
        return result
    return wrapper

@log_decorator
def add(a, b):
    return a + b

print(add(1, 2))

在上面的例子中,我们定义了一个装饰器log_decorator,它接收一个函数作为参数,并返回一个新的函数wrapperwrapper函数在被调用之前和之后会打印一些日志信息。然后我们用@log_decorator语法将装饰器应用到函数add上,这样在调用add函数时会自动调用装饰器中的代码。

除了函数装饰器,Python还支持类装饰器。类装饰器是一种更高级的装饰器形式,它可以用来装饰函数和类。与函数装饰器类似,类装饰器也是一个可调用对象,接收一个函数或类作为参数,并返回一个新的函数或类。下面是一个使用类装饰器的示例:

class log_decorator:
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        print(f"Calling function {self.func.__name__}")
        result = self.func(*args, **kwargs)
        print(f"Function {self.func.__name__} returned {result}")
        return result

@log_decorator
def add(a, b):
    return a + b

print(add(1, 2))

在这个例子中,我们定义了一个类装饰器log_decorator,它接收一个函数作为参数,并将其保存在self.func属性中。然后我们定义了__call__方法,这个方法会在调用装饰器实例时被调用。在__call__方法中,我们可以实现一些与装饰函数相关的逻辑。

总的来说,Python装饰器是一种非常强大的编程技术,它可以帮助我们在不修改已经存在的代码的情况下,为函数或类添加额外的功能。通过装饰器,我们可以实现代码的重用和功能的扩展。通过使用装饰器,我们可以使我们的代码更加模块化和可维护。