getattr()函数是Python自省的核心函数,具体使用大体如下:
10.1.5 获取对象引用getattr
Getattr用于返回一个对象属性,或者方法
- class A:
- def __init__(self):
- self.a = 'a'
- def method(self):
- print "method print"
- a = A()
- print getattr(a, 'a', 'default') #如果有属性a则打印a,否则打印default
- print getattr(a, 'b', 'default') #如果有属性b则打印b,否则打印default
- print getattr(a, 'method', 'default')
- #如果有方法method,否则打印其地址,否则打印default
- print getattr(a, 'method', 'default')()
- #如果有方法method,运行函数并打印None否则打印default
- class A:
- def __init__(self):
- self.a = 'a'
- def method(self):
- print "method print"
- a = A()
- print getattr(a, 'a', 'default') #如果有属性a则打印a,否则打印default
- print getattr(a, 'b', 'default') #如果有属性b则打印b,否则打印default
- print getattr(a, 'method', 'default')
- #如果有方法method,否则打印其地址,否则打印default
- print getattr(a, 'method', 'default')()
- #如果有方法method,运行函数并打印None否则打印default
注:使用getattr可以轻松实现工厂模式。
例:一个模块支持html、text、xml等格式的打印,根据传入的formate参数的不同,调用不同的函数实现几种格式的输出
- import statsout
- def output(data, format="text"):
- output_function = getattr(statsout, "output_%s" % format)
- return output_function(data)
Setattr :
setattr(object, name, value)
This is the counterpart of . The arguments are an object, a string and an arbitrary value. The string may name an existing attribute or a new attribute. The function assigns the value to the attribute, provided the object allows it. For example, setattr(x,'foobar', 123) is equivalent to x.foobar = 123.
这个函数是函数getattr()的对应函数,函数的参数依次为:一个对象,一个字符串和一个任意值。字符串代表这个对象的一个属性,这个属性可以是已经存在的,也可以是这个对象已存在的属性中没有的属性,如果情况属于后者的话,那就是为这个对象新建一个属性,命名为string。并将value赋给属性string。例如:setattr(x,‘foobar’,123)等价于x.foobar = 123.