python 类修饰器】的更多相关文章

1. 修改类函数. 场景: 如果要给一个类的所有方法加上计时,并打印出来.demo如下: # -*- coding:utf-8 -*- import time def time_it(fn): "Example of a method decorator" def decorator(*args, **kwargs): t1=time.time() ret = fn(*args, **kwargs) print '\t\t%d seconds taken for %s'%(time.t…
python语言本身具有丰富的功能和表达语法,其中修饰器是一个非常有用的功能.在设计模式中,decorator能够在无需直接使用子类的方式来动态地修正一个函数,类或者类的方法的功能.当你希望在不修改函数本身的前提下扩展函数的功能时非常有用. 简单地说,decorator就像一个wrapper一样,在函数执行之前或者之后修改该函数的行为,而无需修改函数本身的代码,这也是修饰器名称的来由. 关于函数 在Python中,函数是first class citizen,函数本身也是对象,这意味着我们可以对…
当脚本中需要进行的的相同的异常操作很多的时候,可以用修饰器来简化代码.比如我需要记录抛出的异常: 在log_exception.py文件中, import functools import logging def create_logger(): logger = logging.getLogger("test_log") logger.setLevel(logging.INFO) fh = logging.FileHandler("test.log") fmt =…
# 一.用函数修饰函数 #!/usr/bin/python3 def decorate_func(func): def call(*args, **kwargs): print('you have called %s()' % (func.__name__)) func(*args, **kwargs) return call @decorate_func def func(name): print('I am not a party member.my name is %s.' % (name…
decorator 就是给函数加一层皮,好用! 1 from time import ctime 2 3 def deco(func): 4 def wrappedFunc(*args, **kwargs): 5 print '[%s] %s called' % (ctime(), func.__name__) 6 ret = func(*args, **kwargs) 7 print '[%s] %s call end' % (ctime(), func.__name__) 8 return…
下面这篇对装饰器讲的很好,懂了. http://python.jobbole.com/85056/ <简单 12 步理解 Python 装饰器> 使用装饰器非常简单(见步骤10),但是写装饰器却很复杂. 2. 作用域 在 Python 函数中会创建一个新的作用域.Python 高手也称函数有自己的命名空间.也就是说,当在函数体中遇到变量时,Python 会首先在该函数的命名空间中寻找变量名.Python 有几个函数用来查看命名空间.下面来写一个简单函数来看看局部变量和全局变量的区别. >…
上一篇中我对学习过程中的装饰器进行了总结和整理,这一节简单整理下类装饰器 1.类中的__call__方法: 我们在定义好一个类后,实例化出一个对象,如果对这个对象以直接在后边加括号的方式进行调用,程序就会报错.也就是在类中这种做法是错误的: 而,如果一个类中写入了__call__方法,当我问在对实例对象以括号的方式进行调用时,__call__方法中的语句就会被执行,代码如下: import time # 定义一个Time类 class Time(object): def __init__(sel…
from functools import update_wrapper def debug(func): def wrapper(): print "[DEBUG]: enter {}()".format(func.__name__) return func() return update_wrapper(wrapper,func)#使被修饰的函数名称不会变成wrapper @debug def say_hello(): #被修饰后,函数的代码会变化,先调用wrapper函数 pri…
class Test(): def __init__(self, func): print('装饰器1') self.__func = func def __call__(self): print('装饰器2') self.__func() @Test #等价于test = Test(test),将test重定向到一个新的函数 def test(): print('函数') test() 装饰器1 装饰器2 函数…
import functools def log(option): def dec(func): def swapper(*arg, **karg): functools.update_wrapper(swapper, func) opt = format(option,"^7") print '['+opt+"] enter",func.__name__ res = func(*arg, **karg) print '['+opt+'] exit',func.__…