Skip to content

装饰器

Python 示例

以下是Python中装饰器的示例代码:

py
# title: 装饰器

# 1. 基本装饰器
# 装饰器函数
def my_decorator(func):
    def wrapper():
        print("装饰器开始执行")
        func()
        print("装饰器结束执行")
    return wrapper

# 使用装饰器
@my_decorator
def say_hello():
    print("Hello, World!")

print("基本装饰器示例:")
say_hello()

# 2. 带参数的装饰器

def with_params_decorator(prefix):
    def decorator(func):
        def wrapper(*args, **kwargs):
            print(f"{prefix} 装饰器开始")
            result = func(*args, **kwargs)
            print(f"{prefix} 装饰器结束")
            return result
        return wrapper
    return decorator

@with_params_decorator("======")
def add(a, b):
    return a + b

print("\n带参数的装饰器示例:")
result = add(3, 5)
print(f"3 + 5 = {result}")

# 3. 保留原始函数信息
import functools

def my_decorator2(func):
    @functools.wraps(func)  # 保留原始函数信息
    def wrapper(*args, **kwargs):
        print("装饰器2开始")
        result = func(*args, **kwargs)
        print("装饰器2结束")
        return result
    return wrapper

@my_decorator2
def original_func():
    """这是原始函数的文档字符串"""
    print("原始函数执行")

print("\n保留原始函数信息示例:")
original_func()
print(f"函数名称: {original_func.__name__}")
print(f"函数文档: {original_func.__doc__}")

# 4. 装饰器链(多个装饰器)

def decorator1(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("装饰器1执行")
        return func(*args, **kwargs)
    return wrapper

def decorator2(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("装饰器2执行")
        return func(*args, **kwargs)
    return wrapper

@decorator1
@decorator2
def chained_func():
    print("被装饰的函数执行")

print("\n装饰器链示例:")
chained_func()

# 5. 类装饰器
class ClassDecorator:
    def __init__(self, func):
        self.func = func
    
    def __call__(self, *args, **kwargs):
        print("类装饰器开始")
        result = self.func(*args, **kwargs)
        print("类装饰器结束")
        return result

@ClassDecorator
def say_goodbye():
    print("Goodbye!")

print("\n类装饰器示例:")
say_goodbye()

# 6. 带参数的类装饰器
class ClassDecoratorWithParams:
    def __init__(self, prefix, suffix):
        self.prefix = prefix
        self.suffix = suffix
    
    def __call__(self, func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            print(f"{self.prefix} 类装饰器开始")
            result = func(*args, **kwargs)
            print(f"{self.suffix} 类装饰器结束")
            return result
        return wrapper

@ClassDecoratorWithParams("【开始】", "【结束】")
def multiply(a, b):
    return a * b

print("\n带参数的类装饰器示例:")
result = multiply(4, 6)
print(f"4 * 6 = {result}")

# 7. 装饰器用于计时
def timer_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        import time
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        execution_time = end_time - start_time
        print(f"函数 {func.__name__} 执行时间: {execution_time:.4f} 秒")
        return result
    return wrapper

@timer_decorator
def slow_function():
    import time
    time.sleep(1)  # 模拟耗时操作
    print("慢速函数执行完成")

print("\n计时装饰器示例:")
slow_function()

说明

该示例展示了不同语言中装饰器的基本用法和常见操作。

主要功能

  • 请根据实际代码内容添加功能说明

使用场景

  • 请根据实际代码内容添加使用场景

相关链接