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


Posted in Python onJuly 09, 2018

hasattr(object, name)

判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False。

需要注意的是name要用括号括起来

>>> class test():
 ...   name="xiaohua"
 ...   def run(self):
 ...       return "HelloWord"
 ...
 >>> t=test()
 >>> hasattr(t, "name") #判断对象有name属性
 True
 >>> hasattr(t, "run") #判断对象有run方法
 True
 >>>

getattr(object, name[,default])

获取对象object的属性或者方法,如果存在打印出来,如果不存在,打印出默认值,默认值可选。

需要注意的是,如果是返回的对象的方法,返回的是方法的内存地址,如果需要运行这个方法,可以在后面添加一对括号。

>>> class test():
 ...   name="xiaohua"
 ...   def run(self):
 ...       return "HelloWord"
 ...
 >>> t=test()
 >>> getattr(t, "name") #获取name属性,存在就打印出来。
 'xiaohua'
 >>> getattr(t, "run") #获取run方法,存在就打印出方法的内存地址。
 <bound method test.run of <__main__.test instance at 0x0269C878>>
 >>> getattr(t, "run")() #获取run方法,后面加括号可以将这个方法运行。
 'HelloWord'
>>> getattr(t, "age") #获取一个不存在的属性。
 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
 AttributeError: test instance has no attribute 'age'
 >>> getattr(t, "age","18") #若属性不存在,返回一个默认值。
 '18'
 >>>

setattr(object, name, values)

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

>>> class test():
 ...   name="xiaohua"
 ...   def run(self):
 ...       return "HelloWord"
 ...
 >>> t=test()
 >>> hasattr(t, "age")  #判断属性是否存在
 False
 >>> setattr(t, "age", "18")  #为属相赋值,并没有返回值
 >>> hasattr(t, "age")  #属性存在了
 True
 >>>

一种综合的用法是:判断一个对象的属性是否存在,若不存在就添加该属性。

>>> class test():
 ...   name="xiaohua"
 ...   def run(self):
 ...       return "HelloWord"
 ...
 >>> t=test()
 >>> getattr(t, "age")  #age属性不存在
 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
 AttributeError: test instance has no attribute 'age'
 >>> getattr(t, "age", setattr(t, "age", "18")) #age属性不存在时,设置该属性
 '18'
 >>> getattr(t, "age") #可检测设置成功
 '18'
 >>>

总结

以上所述是小编给大家介绍的Python的hasattr() getattr() setattr() 函数使用方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python with的用法
Aug 22 Python
python3实现跳一跳点击跳跃
Jan 08 Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 Python
Python基础教程之异常详解
Jan 10 Python
python实现AES加密和解密
Mar 27 Python
Python Collatz序列实现过程解析
Oct 12 Python
python3 实现函数写文件路径的正确方法
Nov 27 Python
python实现串口通信的示例代码
Feb 10 Python
django-csrf使用和禁用方式
Mar 13 Python
基于python实现删除指定文件类型
Jul 21 Python
Python中全局变量和局部变量的理解与区别
Feb 07 Python
Python借助with语句实现代码段只执行有限次
Mar 23 Python
将tensorflow的ckpt模型存储为npy的实例
Jul 09 #Python
caffe binaryproto 与 npy相互转换的实例讲解
Jul 09 #Python
利用Python如何生成便签图片详解
Jul 09 #Python
Caffe均值文件mean.binaryproto转mean.npy的方法
Jul 09 #Python
使用Python更换外网IP的方法
Jul 09 #Python
使用Python AIML搭建聊天机器人的方法示例
Jul 09 #Python
Python迭代器与生成器用法实例分析
Jul 09 #Python
You might like
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
PHP验证码无法显示的原因及解决办法
2017/08/11 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
详解Bootstrap插件
2016/04/25 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
在vue中使用jsx语法的使用方法
2019/09/30 Javascript
Openlayers实现测量功能
2020/09/25 Javascript
linux 下实现python多版本安装实践
2014/11/18 Python
在Python中使用模块的教程
2015/04/27 Python
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
Django 查询数据库并返回页面的例子
2019/08/12 Python
Python使用scipy模块实现一维卷积运算示例
2019/09/05 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
信息技术毕业生自荐信范文
2014/03/13 职场文书
大学生党性分析材料
2014/12/19 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
2015年检验科工作总结
2015/04/27 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android