【补充】装饰类的装饰器类作为装饰器

【一】装饰类的装饰器:

  • 装饰类的装饰器是指一个类,它接收一个类作为参数,并返回一个新的类。

  • 这个新的类通常会继承自被装饰的类,并对其进行一些拓展或修改。

  • 示例代码如下:

    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类的对象作为装饰器来装饰这个函数。
    • 在函数执行之前和之后,装饰器会输出一些额外的内容,从而拓展了函数的功能。
posted @ 2023-08-26 21:37  Chimengmeng  阅读(41)  评论(0编辑  收藏  举报