1、官方文档
getattr(object, name[, default])
Return the value of the named attribute of object. name must be a string.
If the string is the name of one of the object’s attributes,
the result is the value of that attribute.
For example, getattr(x, 'foobar') is equivalent to x.foobar.
If the named attribute does not exist, defaultis returned if provided,
otherwise AttributeError is raised.
官方文档中说这个函数作用是返回对象的一个属性,第一个参数是对象实例obj
,name
是个字符串,是对象的成员函数名字或者成员变量,default
当对象没有这个属相的时候就返回默认值,如果没有提供默认值就返回异常。
>>> class Test(object):
... def func(self):
... print 'I am a test'
...
>>> test = Test() # 实例化一个对象
>>> func = getattr(test, 'func') # 使用getattr函数获取func的值
>>> func()
I am a test
>>> func = getattr(test, 'f')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Test' object has no attribute 'f'
>>> func = getattr(test, 'f') # 使用对象没有的属性,则会出现异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Test' object has no attribute 'f'
>>>
2、提供默认值的写法
如果对象没有该属性可以提供一个默认值。
>>> func = getattr(test, 'f', None)
>>> print func
None
>>>
3、使用getattr函数实现工厂模式
实现一个模块支持不用格式的打印,如html、text(默认)等格式,传入formate不同调用不同方法
def print_format(data, format='text'):
# 需要对fomat参数进行验证
output_function = getattr(obj, 'output_%s' % format, None)
if not output_function: # 没有提供的方法
return
return output_function(data) # 使用对应的方法进行打印
参考文章http://www.cnblogs.com/pylemon/archive/2011/06/09/2076862.html
网友评论