http://jianpx.iteye.com/blog/899230
原文名字叫做:浅析python的string.Template
其实问题简单来说就是:能否在定义一个class的时候,在class创建的“第一时间”,将一个变量传进去。
这个“第一时间”在__init__函数之前,因为在Template这种用模板创建的类里,有些成员函数是在__init__之前就被赋值了
想出一个解决方案:
#!/usr/bin/python
#coding :utf-8
from string import Template
def CreateTemplate( s, delimiter=Template.delimiter ):
_ret = None
code = '''
class _mt(Template):
delimiter = '%s'
_ret = _mt
''' % delimiter
exec code
print '?????????\n', _ret
return _ret(s)
def _test():
s = '#who likes #what'
#t = MyTemplate(s, delimiter='#')
t = CreateTemplate(s, delimiter='#')
d = {'who': 'jianpx', 'what': 'mac'}
print t.substitute(d)
if __name__ == '__main__':
_test()
其实就是充分利用了exec这个语句,这在python中可是一个神语句哦~提供最大限度的灵活性,当然也毫无安全性和效率可言。
这个语句的用途还有很多,我个人非常喜欢,在实际项目中也用来解决一些疑难问题,比如解析C++头文件的定义到Python中。