getattr(object, name) = object.name
Demo
result = obj.method(args)
// 使用getattr
func = getattr(obj, "method")
result = func(args)
// 或者写成一行
result = getattr(obj, "method")(args)
异常安全的写法:
主要有两种异常
AttributeError: 对象中没有该属性
try:
func = getattr(obj, "method")
except AttributeError:
...... deal
else:
result = func(args)
// 或指定默认返回值
func = getattr(obj, "method", None)
if func:
func(args)
TypeError: 不可调用
func = getattr(obj, "method", None)
if callable(func):
func(args)
用getattr实现工厂方法:
Demo:一个模块支持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)
参考资料:
http://docs.python.org/2.7/library/functions.html?highlight=getattr#getattr python2.7文档