写一个python装饰器的例子
时间: 2023-03-14 07:08:46 浏览: 61
这是一个简单的python装饰器示例:def my_decorator(func):
def wrapper(*args, **kwargs):
print("Before calling " + func.__name__)
func(*args, **kwargs)
print("After calling " + func.__name__)
return wrapper@my_decorator
def say_hello(name):
print("Hello, " + name)say_hello("John")输出:
Before calling say_hello
Hello, John
After calling say_hello
相关问题
手写一个装饰器模式的例子
装饰器模式是一种结构型设计模式,它允许在不修改现有对象的情况下,动态地添加功能。下面是一个手写的装饰器模式的例子:
```python
# 定义一个基础组件
class Component:
def operation(self):
pass
# 定义一个具体组件,实现基础组件的操作
class ConcreteComponent(Component):
def operation(self):
return "具体组件的操作"
# 定义一个装饰器,继承基础组件,并包含一个基础组件作为属性
class Decorator(Component):
_component = None
def __init__(self, component):
self._component = component
def operation(self):
return self._component.operation()
# 定义一个具体装饰器,继承装饰器,并在基础组件操作的前面或者后面添加额外的操作
class ConcreteDecoratorA(Decorator):
def operation(self):
return f"具体装饰器A的操作({self._component.operation()})"
# 定义另一个具体装饰器,也继承装饰器,并在基础组件操作的前面或者后面添加额外的操作
class ConcreteDecoratorB(Decorator):
def operation(self):
return f"具体装饰器B的操作({self._component.operation()})"
# 使用示例
if __name__ == "__main__":
# 创建一个具体组件
component = ConcreteComponent()
print(component.operation())
# 创建一个具体装饰器A,并将具体组件作为参数传入
decorator_a = ConcreteDecoratorA(component)
print(decorator_a.operation())
# 创建一个具体装饰器B,并将具体装饰器A作为参数传入
decorator_b = ConcreteDecoratorB(decorator_a)
print(decorator_b.operation())
```
输出结果:
```
具体组件的操作
具体装饰器A的操作(具体组件的操作)
具体装饰器B的操作(具体装饰器A的操作(具体组件的操作))
```
在这个例子中,我们定义了一个基础组件 `Component` 和一个具体组件 `ConcreteComponent`,后者实现了基础组件的操作。然后我们定义了一个装饰器 `Decorator`,它继承了基础组件,并包含一个基础组件作为属性。接着我们定义了两个具体装饰器 `ConcreteDecoratorA` 和 `ConcreteDecoratorB`,它们分别继承了装饰器,并在基础组件操作的前面或者后面添加了额外的操作。
在使用示例中,我们先创建了一个具体组件,然后创建一个具体装饰器A,并将具体组件作为参数传入。接着我们创建了一个具体装饰器B,并将具体装饰器A作为参数传入。最后我们分别调用了三个对象的操作方法,并输出了结果。可以看到,每个对象的操作都被包含在额外的操作中,而且这些操作是可以动态添加的。
python 写个装饰器
下面是一个简单的Python装饰器的例子,它可以在函数执行前后打印出函数名和参数:
```python
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Calling function: {}".format(func.__name__))
print("Args: {}".format(args))
print("Kwargs: {}".format(kwargs))
result = func(*args, **kwargs)
print("Function {} finished".format(func.__name__))
return result
return wrapper
@my_decorator
def add(a, b):
return a + b
print(add(1, 2))
```
输出结果为:
```
Calling function: add
Args: (1, 2)
Kwargs: {}
Function add finished
3
```
在这个例子中,`my_decorator`是一个装饰器函数,它接受一个函数作为参数,并返回一个新的函数`wrapper`。`wrapper`函数在执行被装饰的函数之前和之后打印出一些信息,并返回被装饰函数的结果。`@my_decorator`语法是Python中装饰器的一种简写方式,它等价于`add = my_decorator(add)`。