Python的hasattr() getattr() setattr() 函数使用方法详解



(一) hasattr(object,name) 函数

判断一个对象里面是否有 name 属性或者 name 方法,返回 bool 值,如果有 name 属性(方法)则返回 True ,否则返回 False 。注意: name 需要使用引号括起来。

class function_demo(object):    name = 'demo'    def run(self):       return "hello function" functiondemo = function_demo()print(hasattr(functiondemo, 'name')) #判断对象是否有 name 属性,Trueprint(hasattr(functiondemo, "run")) #判断对象是否有 run 方法,Trueprint(hasattr(functiondemo, "age")) #判断对象是否有 age 属性,False

 

(二) getattr(object,name[,default]) 函数

获取对象 object 的属性或者方法,若存在则打印出来;若不存在,则打印默认值,默认值可选。注意:如果返回的是对象的方法,那么打印的结果是方法的内存地址。如果需要运行这个方法,那么可以在后面添加括号 ()

class function_demo(object):    name = 'demo'    def run(self):       return "hello function" functiondemo = function_demo()print(getattr(functiondemo, 'name')) #获取 name 属性,存在就打印出来--- demoprint(getattr(functiondemo, "run"))# 获取 run 方法,存在打印出方法的内存地址# <bound method function_demo.run of <__main__.function_demo object at 0x006E8A10>> # print(getattr(functiondemo, "age"))# 获取不存在的属性,报错如下:# Traceback (most recent call last):#   File "F:/Python/PycharmProjects/Mytest_code/tmp.py", line 11, in <module>#     getattr(functiondemo, "age")# AttributeError: 'function_demo' object has no attribute 'age' print(getattr(functiondemo, "age", 18)) #获取不存在的属性,返回一个默认值

 

(三) setattr(object,name,values) 函数

给对象的属性赋值,若属性不存在,则先创建再赋值。

class function_demo(object):     name = 'demo'     def run(self):       return "hello function"functiondemo = function_demo() print(hasattr(functiondemo, 'age'))# 判断 age 属性是否存在,Falsesetattr(functiondemo, 'age', 18 ) #对 age 属性进行赋值,无返回值print(hasattr(functiondemo, 'age')) #再次判断属性是否存在,True综合使用:class function_demo(object):name = 'demo'def run(self):  return "hello function" functiondemo = function_demo() if hasattr(functiondemo, 'addr'):# 先判断是否存在    addr = getattr(functiondemo, 'addr')    print(addr)else:    addr = getattr(functiondemo, 'addr', setattr(functiondemo, 'addr', '首都北京'))    #addr = getattr(functiondemo, 'addr', '美国纽约')    print(addr)

 

运行结果:首都北京。



下面的示例首先 判断一个对象的属性是否存在,若不存在 添加该属性:

class test():    name="xinxiaoting"    def run(self):            return "HelloWord" t=test()if not hasattr(t,"age"):    # getattr(t, "age", setattr(t, "age", "18")) #age属性不存在时,设置该属性    setattr(t, "age", "18")print(getattr(t, "age"))  #可检测设置成功

 







About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub( http://blog.itpub.net/26736162 )、博客园( http://www.cnblogs.com/lhrbest )和个人weixin公众号( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 (满) 、618766405

● weixin群:可加我weixin,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 646634621 ,注明添加缘由

● 于 2019-05-01 06:00 ~ 2019-05-30 24:00 在魔都完成

● 最新修改时间:2019-05-01 06:00 ~ 2019-05-30 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

小麦苗的微店 : https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麦苗出版的数据库类丛书 : http://blog.itpub.net/26736162/viewspace-2142121/

小麦苗OCP、OCM、高可用网络班 : http://blog.itpub.net/26736162/viewspace-2148098/

小麦苗腾讯课堂主页 : https://lhr.ke.qq.com/

........................................................................................................................

使用 weixin客户端 扫描下面的二维码来关注小麦苗的weixin公众号( xiaomaimiaolhr )及QQ群(DBA宝典)、添加小麦苗weixin, 学习最实用的数据库技术。

........................................................................................................................

 

 




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2643143/,如需转载,请注明出处,否则将追究法律责任。

©著作权归作者所有:来自51CTO博客作者小麦苗DB宝的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Python下安装Scrapy
  2. Python3 环境搭建
  3. Python安装graphics库
  4. 【DB】数据库面试笔试题库及详解(小麦苗DBA宝典出品)--数据库运维
  5. es6 javascript的class类中的 get和set
  6. Python3 环境搭建(Windows和Linux)
  7. Python3中的运算符
  8. Python操作Word
  9. Python2.x与3.x版本有哪些主要的区别?

随机推荐

  1. Java线程之线程状态的转换
  2. Unity 阴影
  3. 如何用 Map 对象创建 Set 对象
  4. redis集群教程(一)
  5. Arrays.sort() 你应该知道的事
  6. Java线程之线程的同步与锁
  7. redis之Sentinel
  8. Java线程之线程的交互
  9. clone 方法是如何工作的
  10. redis之发布与订阅