使用getattr可以轻松实现工厂模式:
例:一个模块支持html、text、xml等格式的打印,根据传入的formate参数的不同,调用不同的函数实现几种格式的输出
import statsout
def output(data, format="text"):
output_function = getattr(statsout, "output_%s" %format)
return output_function(data)
这个例子中可以根据传入output函数的format参数的不同 去调用statsout模块不同的方法(用格式化字符串实现output_%s),
返回的是这个方法的对象 就可以直接使用了,如果要添加新的格式,只需要在模块中写入新的方法函数,在调用output函数时使用新的参数就可以使用不同的格式输出。
确实很方便。