在工作中遇到这个函数,没想起来再哪碰到过,一找让我惊讶啦,这个函数好强大。下面简单介绍一起其用法。
1、获取类变量
class A:
a = 1
getattr(A,'a') == 1
2、 获取类函数
class B:
def funb():
print 'abc'
getattr(B,'funb')
>'abc'
3、貌似还可以实现工厂模式(例子来自网上,没验证过)
import statsout
def output(data, format="text"):
output_function = getattr(statsout, "output_%s" % format)
return output_function(data)
除了getattr外,还有 setattr | delattr | hasattr 等几个函数,作用与名称一致
附上一个比较碉堡的实例:
class A:
def stepOne(**kargs):
pass
def steptwo(**kargs):
pass
def stepthree(**kargs):
pass
def stepfour(**kargs):
pass
.....
class B:
default_actions=(('stepOne",{}),('steptwo",{}),('stepthree",{}),('stepfour",{}),)
def run(**kargs):
actions = kargs.get('actions', default_actions)
for act,karg in actions:
getattr(self,act)(**karg)
这样只要定义一个action (名称,{变量})就能够传递到class A的对应函数中执行,还能够顺序执行