如果某个实例foo有多个方法, 当对foo的每一个方法我们都需要使用try ... except ...进行包装的时候,内置函数getattr()可以用来精简代码。

1. getattr()的用法

# https://docs.python.org/2/library/functions.html#getattr

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, default is returned if provided, otherwise
AttributeError is raised.

简单来说,getattr()就是获取对象object的属性或者方法。如果获取对象的方法,则返回的是该方法的内存地址。那么,如需要运行这个方法,在后面添加一对括号即可。这跟使用函数指针是类似的。举个例子:

  • foo.py
 #!/usr/bin/python

 import sys

 class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age def get_name(self):
return self.name def get_age(self):
return self.age def set_name(self, name):
self.name = name def set_age(self, age):
self.age = age def main(argc, argv):
p = Person('Jack', 25)
print 'Name: %s, Age: %d' % (p.get_name(), p.get_age()) getattr(p, 'set_name')('Lily')
getattr(p, 'set_age')(36)
print 'Name: %s, Age: %d' % (getattr(p, 'get_name')(),
getattr(p, 'get_age')()) return 0 if __name__ == '__main__':
argv = sys.argv
argc = len(sys.argv)
sys.exit(main(argc, argv))
  • run foo.py
$ ./foo.py
Name: Jack, Age:
Name: Lily, Age:

在上面的例子中,

getattr(p, 'set_name')('Lily')

等同于

p.set_name('Lily')

2. 一个利用getattr()精简代码的例子

 import time

 class JenkinsProject(object):
def __get_job_prop(self, job, method, interval):
for i in range(self.retry_cnt):
try:
return getattr(job, method)()
except Exception as e:
time.sleep(interval) print("fail to %s after retry %d times" %
(method.replace('_', ' '), self.retry_cnt))
raise e def get_build_ids(self, job, interval=60):
return self.__get_job_prop(self, job, 'get_build_ids', interval) def get_last_build(self, job, interval=60):
return self.__get_job_prop(self, job, 'get_last_build', interval)

[Python学习笔记-001] 内置函数getattr()的更多相关文章

  1. Python学习笔记-Day3-python内置函数

    python内置函数 1.abs    求绝对值 2.all 判断迭代器中的所有数据是否都为true 如果可迭代的数据的所有数据都为true或可迭代的数据为空,返回True.否则返回False 3.a ...

  2. Python学习笔记011——内置函数exec()

    1 描述 把一个字符串当成语句执行 exec()  执行储存在字符串或文件中的 Python 语句,相比于  eval() , exec() 可以执行更复杂的 Python 代码. exec函数和ev ...

  3. Python学习笔记-常用内置函数

    输出:print() 功能:输出打印 语法:print(*objects, sep=' ', end='\n', file=sys.stdout) 参数:objects----复数,表示可以一次输出多 ...

  4. python学习笔记011——内置函数pow()

    1 语法 pow(x, y[, z]) x -- 数值表达式. y -- 数值表达式. z -- 数值表达式. 函数是计算 x 的 y 次方,如果 z 在存在,则再对结果进行取模,其结果等效于pow( ...

  5. python学习笔记013——内置函数dir()

    1 描述 dir() 函数 不带参数时,返回当前范围内的变量.方法和定义的类型列表: 带参数时,返回参数的属性.方法列表. 如果参数包含方法__dir__(),该方法将被调用. 如果参数不包含__di ...

  6. python学习笔记011——内置函数dir()

    1 描述 dir()函数可以查看(打印)对象的属性和方法.不管时那种对象(python中一切皆对象)类型(数据,模块)都有自己的属性和方法. dir() 函数不带参数时,返回当前范围内的变量.方法和定 ...

  7. 05 python学习笔记-常用内置函数(五)

    1.sorted() 函数对所有可迭代的对象进行排序(默认升序)操作 sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作. l ...

  8. Python学习笔记2—内置函数

    函数的使用 官方文档:https://docs.python.org/2/library/functions.html

  9. python学习笔记011——内置函数__module__、__name__

    1 __module__描述 __module__ : 如果当前模块为顶层模块执行 则打印__main__ 如果当前模块为被调用模块的时候 打印当前模块的名称 2 __module__示例 def f ...

随机推荐

  1. Windows 8.1常见问题

    Windows 8.1常见问题 1. 我想升级Windows 8.1,但是担心软件.硬件不兼容怎么办? 对于已安装的软件及联机的设备,可以在微软网站上下载Windows 8.1升级助手进行检测,会在检 ...

  2. MapReduce编程之wordcount

    实践 MapReduce编程之wordcount import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Fi ...

  3. ASP.NET Web API 框架研究 ASP.NET Web API 路由

    ASP.NET Web API 核心框架是一个独立的.抽象的消息处理管道,ASP.NET Web API有自己独立的路由系统,是消息处理管道的组成部分,其与ASP.NET路由系统有类似的设计,都能找到 ...

  4. ssh连接超慢解决

    手头有台Linux服务器ssh登录时超级慢,需要几十秒.其它服务器均没有这个问题.平时登录操作都默默忍了.今天终于忍不住想搞清楚到底什么原因.搜索了一下发现了很多关于ssh登录慢的资料,于是自己也学着 ...

  5. HDU 1465 2045 已知结果往前推

    1465 不容易系列之一 Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %I64d , %I64u Java ...

  6. hdu 1.2.3

    很简单的算法基础题...闰年判断以及计算 #include<iostream> #include<cstdio> using namespace std; int main() ...

  7. 分形之C折线

    前面讲了列维(levy)曲线,它是将一条线段不停地分形成两条长度相等且相互垂直的线段而生成.还有分形龙也是将一个线段对折成夹角为90度的两个线段.这一节展示的是将线段不停地分形成两条长度相等且夹角不固 ...

  8. [leet code 165]Compare Version Numbers

    1 题目 Compare two version numbers version1 and version2.If version1 > version2 return 1, if versio ...

  9. [proposal][app]Watch your time!

    [Motivation] 很多时候,我们要去某个地方,尤其是第一次去的时候,都不知道什么时候出发,留出的时间够不够,会不会早到或者晚到.虽然地图软件能给出一些粗略的步行,公交,或者出租时间估计,但是每 ...

  10. MVC中通过ajax判断输入的内容是否重复(新手笔记,请各位多多指教)

    控制器代码: public string ValidateCarID(string carid)//这里接收ajax传递过来的值 { string result; Car car = db.Car.F ...