一次执行只作用一次的方法

对于多处会调用,而只需要执行一次的方法来说(比如多个地方依赖某个配置信息,而使用的时候需要先检查配置信息是否过期,这种检查更新当然是一次就ok),使用以下方法即可。

def run_once(func2=None):
    '''
    将此注解作用于某方法即可,这里还可以添加第2-n次执行其他方法
    :param func2: 可选.
    :return:
    '''
    def wrap(func):
        @wraps(func)
        def inner(*args, **kwargs):
            try:
                func.xxxxx
                raise ValueError
            except AttributeError:
                func.xxxxx = 0
                return func(*args, **kwargs)
            except ValueError:
                if func2 is not None:
                    return func2(*args, **kwargs)
                else:
                    pass
        return inner
    return wrap  
原文地址:https://www.cnblogs.com/lunge-blog/p/14663610.html