最近阅读tensor2tensor和华为AutoML的源码,发现都用到了装饰器这种用法。简单说就是通过import注册可能用到的类的定义的代码地址,然后后续根据配置需要获得哪个类的实例,在实现过程中都用到了python装饰器,下面就python装饰器的用法做个记录。
decor.py
def debug(name=None):
print 'Prepare and say...',
print name
name()
@debug
def say():
print "hello!"
return "nihao"
if __name__=='__main__':
say('tensor2tensor')
test_import.py
import decro
执行 python test_import.py得到如下输出
Prepare and say... <function say at 0x7f8f32286aa0>
hello!
也就是在import decro过程中,遍历了文件中的代码并且执行了装饰器的方法。同样的,类的注册是一样的方法。