美文网首页
将装饰器定义为类的一部分

将装饰器定义为类的一部分

作者: noteby | 来源:发表于2019-02-20 10:07 被阅读0次

    场景:在类中定义装饰器,并将其作用在其他函数或方法上。

    from functools import wraps
    
    
    class A:
        # Create a property
        @property
        def first_name(self):
            return self._first_name
    
        # Apply decorator methods
        @first_name.setter
        def first_name(self, value):
            if not isinstance(value, str):
                raise TypeError('Expected a string')
            self._first_name = value
    
        # Decorator as an instance method
        def decorator1(self, func):
            @wraps(func)
            def wrapper(*args, **kwargs):
                print('Decorator 1')
                return func(*args, **kwargs)
    
            return wrapper
    
        # Decorator as a class method
        @classmethod
        def decorator2(cls, func):
            @wraps(func)
            def wrapper(*args, **kwargs):
                print('Decorator 2')
                return func(*args, **kwargs)
    
            return wrapper
    
    
    # As an instance method
    a = A()
    
    
    @a.decorator1
    def func1():
        print('func1')
    
    
    # As a class method
    @A.decorator2
    def func2():
        print('func2')
    
    
    if __name__ == '__main__':
        func1()
        func2()
        a.first_name = 'lily'
        print(a.first_name)
    

    相关文章

      网友评论

          本文标题:将装饰器定义为类的一部分

          本文链接:https://www.haomeiwen.com/subject/vuecyqtx.html