【一】装饰类的装饰器:
-
装饰类的装饰器是指一个类,它接收一个类作为参数,并返回一个新的类。
-
这个新的类通常会继承自被装饰的类,并对其进行一些拓展或修改。
-
示例代码如下:
def decorator(cls): class NewClass(cls): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.new_attribute = 'Added attribute' def new_method(self): print("New method") return NewClass @decorator class OriginalClass: def __init__(self): self.original_attribute = 'Original attribute' def original_method(self): print("Original method") obj = OriginalClass() obj.original_method() # Output: "Original method" obj.new_method() # Output: "New method" print(obj.original_attribute) # Output: "Original attribute" print(obj.new_attribute) # Output: "Added attribute"
- 在上述示例中,
decorator
是装饰类的装饰器。 - 它接收一个类
cls
作为参数,并创建一个继承自cls
的新类NewClass
。 - 在
NewClass
中,我们添加了一个新的属性new_attribute
以及一个新的方法new_method
。 - 通过将装饰器
@decorator
应用于OriginalClass
,我们创建了一个经过装饰的新类OriginalClass
,该类继承自原始类,并拥有额外的属性和方法。
- 在上述示例中,
【二】类作为装饰器:
-
类作为装饰器是指一个类,它实现了
__call__
方法,使得该类的对象可以像函数一样被调用,并用于装饰其他函数或类。 -
这种装饰器通常会在被装饰对象的前后添加额外的行为或对其进行修改。
-
示例代码如下:
class Decorator: def __init__(self, func): self.func = func def __call__(self, *args, **kwargs): print("Before function execution") result = self.func(*args, **kwargs) print("After function execution") return result @Decorator def decorated_function(): print("Decorated function") decorated_function() # Output: "Before function execution", "Decorated function", "After function execution"
- 在上述示例中,
Decorator
类实现了__call__
方法,使得该类的对象可以像普通函数一样被调用。 - 通过将装饰器
@Decorator
应用于函数decorated_function
,我们将Decorator
类的对象作为装饰器来装饰这个函数。 - 在函数执行之前和之后,装饰器会输出一些额外的内容,从而拓展了函数的功能。
- 在上述示例中,