• 函数装饰器、类装饰器


    一:函数装饰函数
    def wrapFun(func):
        def inner(a, b):
            print('function name:', func.__name__)
            r = func(a, b)
            return r
        return inner
    
    @wrapFun
    def myadd(a, b):
        return a + b
    
    print(myadd(2, 3))
    
    二:函数装饰类
    def wrapClass(cls):
        def inner(a):
            print('class name:', cls.__name__)
            return cls(a)
        return inner
    
    @wrapClass
    class Foo():
        def __init__(self, a):
            self.a = a
    
        def fun(self):
            print('self.a =', self.a)
    
    
    m = Foo('xiemanR')
    m.fun()
    
    三:类装饰函数
    class ShowFunName():
        def __init__(self, func):
            self._func = func
    
        def __call__(self, a):
            print('function name:', self._func.__name__)
            return self._func(a)
    
    
    @ShowFunName
    def Bar(a):
        return a
    
    print(Bar('xiemanR'))
    
    四:类装饰类
    class ShowClassName(object):
        def __init__(self, cls):
            self._cls = cls
    
        def __call__(self, a):
            print('class name:', self._cls.__name__)
            return self._cls(a)
    
    
    @ShowClassName
    class Foobar(object):
        def __init__(self, a):
            self.value = a
    
        def fun(self):
            print(self.value)
    
    a = Foobar('xiemanR')
    a.fun()

    五:函数装饰类中的方法
    
    def wrapFun(func):
        def inner(*args, **kwargs):
            r = func(*args, **kwargs)
            return r
        return inner
    class Foobar(object):
        def __init__(self, a):
            self.value = a
      

      @wrapFun   def fun(self): print(self.value) a = Foobar('xiemanR') a.fun()
     
    六:类装饰器装饰类中的方法:  会报错,原因是fun被装饰后变成了类的一个属性,而不是方法。
     
  • 相关阅读:
    9IDEA常见的快捷键
    8Java类与对象
    5Java运算符
    10Java面向对象中级
    3Java基础
    4Java基础变量
    6Java控制结构
    7Java数组
    11Java面向对象高级
    缓存事件过期监听机制
  • 原文地址:https://www.cnblogs.com/liuwei0824/p/10403263.html
Copyright © 2020-2023  润新知