python中hasattr()、getattr()、setattr()函数的使用


Posted in Python onAugust 16, 2019

 引言:

在阅读源码时,有很多简写的形式,其中一个比较常用的就是getattr()用来调用一个类中的变量或者方法,相关联的hasattr()、getattr()、setattr()函数的使用也一并学习了一下。

正文:

1. hasattr(object, name)

判断object对象中是否存在name属性,当然对于python的对象而言,属性包含变量和方法;有则返回True,没有则返回False;需要注意的是name参数是string类型,所以不管是要判断变量还是方法,其名称都以字符串形式传参;getattr和setattr也同样;

>>> 
>>> class A():
  name = 'python'
  def func(self):
    return 'A()类的方法func()'
>>> 
>>> hasattr(A, 'name')
True
>>> 
>>> hasattr(A, 'age')
False
>>> 
>>> hasattr(A, 'func')
True
>>>

2. getattr(object, name[, default])

获取object对象的属性的值,如果存在则返回属性值,如果不存在分为两种情况:

(1)没有default参数时,会直接报错;

(2)给定了default参数,若对象本身没有name属性,则会返回给定的default值;

如果给定的属性name是对象的方法,则返回的是函数对象,需要调用函数对象来获得函数的返回值;调用的话就是函数对象后面加括号,如func之于func();

另外还需要注意:

如果给定的方法func()是实例函数,则不能写getattr(A, 'func')(),因为fun()是实例函数的话,是不能用A类对象来调用的,应该写成getattr(A(), 'func')();

实例函数和类函数的区别:

实例函数定义时,直接def func(self):,这样定义的函数只能是将类实例化后,用类的实例化对象来调用;

而类函数定义时,需要用@classmethod来装饰,函数默认的参数一般是cls,类函数可以通过类对象来直接调用,而不需要对类进行实例化;

>>> 
>>> class A():
  name = 'python'
  def func(self):
    return 'Hello world'
>>> 
>>> getattr(A, 'name')
'python'
>>> 
>>> getattr(A, 'age')
# age变量不存在则报错
Traceback (most recent call last):
 File "<pyshell#464>", line 1, in <module>
  getattr(A, 'age')
AttributeError: class A has no attribute 'age'
>>> 
>>> getattr(A, 'age', 20)
>>> 
>>> getattr(A, 'func')
<unbound method A.func>
>>> 
>>> getattr(A, 'func')()

# func()函数不能被A类对象调用,所以报错, 需要用类的实例化对象来调用
Traceback (most recent call last):
 File "<pyshell#470>", line 1, in <module>
  getattr(A, 'func')()
TypeError: unbound method func() must be called with A instance as first argument (got nothing instead)
>>> 
>>> getattr(A(), 'func')()
'Hello world'
>>> 
>>> class A(object):
  

name = 'python'
  

@classmethod
  

def func(cls):
    


return 'the method of A object.'
>>> 
>>> getattr(A, 'func')()
'the method of A object.'
>>>

3. setattr(object, name, value)

给object对象的name属性赋值value,如果对象原本存在给定的属性name,则setattr会更改属性的值为给定的value;如果对象原本不存在属性name,setattr会在对象中创建属性,并赋值为给定的value;

>>> 
>>> class A():
  name = 'python'
  def func(self):
    return 'Hello world'
>>> 
>>> setattr(A, 'name', 'java')
>>> getattr(A, 'name')
'java'
>>> 
>>> setattr(A, 'age', 20)
>>> getattr(A, 'age')
>>>

一般先判断对象中是否存在某属性,如果存在则返回;如果不存在,则给对象增加属性并赋值:

>>> 
>>> class A():
  name = 'python'
  def func(self):
    return 'Hello world'
>>> 
>>> if hasattr(A, 'age'):
  print getattr(A, 'age')
else:
  setattr(A, 'age', 20)
>>> 
>>> getattr(A, 'age')
>>>

 感受一下:

python中hasattr()、getattr()、setattr()函数的使用

总结

以上所述是小编给大家介绍的python中hasattr()、getattr()、setattr()函数的使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python del()函数用法
Mar 24 Python
python实现读取命令行参数的方法
May 22 Python
Python之py2exe打包工具详解
Jun 14 Python
python求解数组中两个字符串的最小距离
Sep 27 Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 Python
CentOS7安装Python3的教程详解
Apr 10 Python
Python使用正则表达式分割字符串的实现方法
Jul 16 Python
django model object序列化实例
Mar 13 Python
Django调用百度AI接口实现人脸注册登录代码实例
Apr 23 Python
Python 执行矩阵与线性代数运算
Aug 01 Python
Python实现小黑屋游戏的完整实例
Jan 06 Python
python cv2图像质量压缩的算法示例
Jun 04 Python
Python中IP地址处理IPy模块的方法
Aug 16 #Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
Aug 16 #Python
Pyinstaller 打包exe教程及问题解决
Aug 16 #Python
python函数参数(必须参数、可变参数、关键字参数)
Aug 16 #Python
Python Web框架之Django框架文件上传功能详解
Aug 16 #Python
基于 Django 的手机管理系统实现过程详解
Aug 16 #Python
python创建与遍历List二维列表的方法
Aug 16 #Python
You might like
用文本文件制作留言板提示(下)
2006/10/09 PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
2009/08/07 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
DWR Ext 加载数据
2009/03/22 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
Javascript中 关于prototype属性实现继承的原理图
2013/04/16 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
JS对象转换为Jquery对象示例
2014/01/26 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
2015/03/03 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
python迭代器的使用方法实例
2013/11/21 Python
python类和继承用法实例
2015/07/07 Python
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
西班牙在线药店:DosFarma
2020/03/28 全球购物
人事部专员岗位职责
2014/03/04 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
大学生军训感言
2015/08/01 职场文书
python实现简单聊天功能
2021/07/07 Python