python进阶(4) getattr的用法
来源:互联网 发布:网络id 编辑:程序博客网 时间:2024/05/10 08:05
熟悉getattr的应该知道,getattr(a, 'b')的作用就和a.b是一样的
那么这个内建函数有什么作用呢,最方便的无疑是使用它来实现工厂方法(Factory Method)模式
另外,在回调函数里也经常使用这个函数,对回调理解不深,这里不再举例
先看一下官方文档:
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.
参数说明:
- object:对象的实例
- name:字符串,对象的成员函数的名字或者成员变量
- default:当对象中没有该属性时,返回的默认值
- 异常:当没有该属性并且没有默认的返回值时,抛出"AttrbuteError"
作用:
getattr(object, name) = object.name
Demo
result = obj.method(args)// 使用getattrfunc = getattr(obj, "method")result = func(args)// 或者写成一行result = getattr(obj, "method")(args)
异常安全的写法:
主要有两种异常
AttributeError: 对象中没有该属性
try: func = getattr(obj, "method")except AttributeError: ...... dealelse: 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://www.cnblogs.com/pylemon/archive/2011/06/09/2076862.html Python找那个的getattr()函数详解
http://docs.python.org/2.7/library/functions.html?highlight=getattr#getattr python2.7文档
- python进阶(4) getattr的用法
- Python的getattr用法
- python 的getattr的用法
- python getattr/setattr/hasattr的用法
- Python的getattr函数
- Python的getattr()
- Python的hasattr、getattr
- 神奇的getattr - Python
- 详细讲述python自省函数getattr的用法
- 详细讲述python自省函数getattr的用法
- python 的使用:getattr,hasattr
- python的getattr和setattr
- python的setattr,getattr,hasattr
- getattr用法
- python getattr()
- python -- getattr
- python getattr
- python getattr()
- synchronized 实现生产者消费者问题
- firefox插件fireftp真不错 不用额外的ftp软件了
- 开发一个Windows版的hello world
- 开源分布式存储系统介绍
- jQuery弹出框在iframe无法正常使用的解决方式
- python进阶(4) getattr的用法
- SpringMVC+hibernate+mysql中要注意的问题——特别是注释的问题
- Lock锁 实现生产者和消费者问题
- 死锁问题
- android:为TextView添加样式——下划线,颜色,设置链接样式及前背景色
- django中的meta参数
- flex application/group addChild失败
- vmware-vdiskmanager使用详解,vmware linux系统磁盘扩容,合并多个磁盘文件
- TCP建立和关闭过程