一、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')
# 结果:Truehasattr(A, 'age')
# 结果:Falsehasattr(A, 'func')
# 结果:True

二、getattr(object, name[, default])

获取object对象的属性的值,如果存在则返回属性值,如果不存在分为两种情况,一种是没有default参数时,会直接报错;给定了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)
# 结果: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'@classmethoddef func(cls):return 'the method of A object.'getattr(A, 'func')()
# 结果:'the method of A object.'

三、 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'
# Python学习交流群:711312441
setattr(A, 'age', 20)
getattr(A, 'age')
# 结果:20

四、示例

先判断对象中是否存在某属性,如果存在则返回;如果不存在,则给对象增加属性并赋值;很简单的if-else判断:

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')
# 结果:20复制代码

Python学习: hasattr()、getattr()、setattr()函数简介相关推荐

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

    Python的hasattr() getattr() setattr() 函数使用方法详解 (一) hasattr(object,name) 函数 判断一个对象里面是否有 name 属性或者 name ...

  2. python中setattr用法_详解Python的hasattr() getattr() setattr() 函数使用方法

    hasattr(object, name) 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False. 需要注意的是name要用括号括起来 ...

  3. Python中hasattr() getattr() setattr() 函数的使用

    hasattr(object,name)函数: 判断一个对象里面是否有name属性或者name方法,返回bool值,有name属性(方法)返回True,否则返回False. class functio ...

  4. Python的hasattr() getattr() setattr() 函数使用方法

    hasattr(object, name) 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False. >>> class ...

  5. [转载] python hasattr函数_Python的hasattr() getattr() setattr() 函数使用方法详解

    参考链接: Python hasattr() hasattr(object, name) 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回Fa ...

  6. python hasattr() getattr() setattr()函数的使用

    hasattr(object,name):用于判断一个对象里中是否存在name这一特性. 由测试结果可知,对象a里包含特性name和方法greet(),所以输出True,而不包含特性age,所以has ...

  7. Python hasattr() getattr() setattr() 函数使用

    1.setattr(object, name, values) 给对象设置属性,如果对象不存在,则创建对象 layers = nn.Sequential(nn.Conv2d(curr_dim, cur ...

  8. python hasattr函数_Python的hasattr() getattr() setattr() 函数使用方法详解

    hasattr(object, name) 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False. 需要注意的是name要用括号括起来 ...

  9. python hasattr函数_Python的反射机制、hasattr() getattr() setattr() 函数使用方法详解

    hasattr(object, name) 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False. 需要注意的是name要用括号括起来 ...

  10. Python的hasattr(),getattr(),setattr()

    1. hasattr(object, name) 判断object里是否有name属性,有就返回True,没有则返回False. class MyClass(object):name = 'jack' ...

最新文章

  1. redis 主从切换
  2. 【Git入门之一】Git是神马?
  3. oracle存储过程 调用java_Oracle存储过程调用Java方法
  4. 数据结构-二叉树面试 常考
  5. linux安装selenium+chrome+phantomjs
  6. arduino灯光装置_【pinpong库控制硬件】之Arduino uno-调光台灯
  7. 目标检测(Object Detection)的整理
  8. 微信小程序微商城:开发者key获取
  9. kx linux驱动下载,创新5.1声卡驱动kX Project Audio DriverV5.1免费版下载 - 下载吧
  10. Google测试之道读后感
  11. 全世界最高级最好的操作系统,人人都可以用
  12. 淘宝打折骗局--尤其硬盘
  13. 琴生不等式及其加权形式的证明
  14. 重邮内网外入及其最新版创翼下载
  15. __FILE__, __FUNCTION__, __LINE__学习篇,谨以此文告别那无知的岁月
  16. 网络经商22条赚钱法则
  17. windows10删除多余顽固输入法
  18. JSON.parse解析字符串报错-SyntaxError: Unexpected token ‘ in JSON at position 报错 并捕获该异常操作
  19. Spring----Spring入门
  20. 河南计算机教师资格证,河南教师资格证考试科目

热门文章

  1. Unity对象池简单应用
  2. 动态网站开发讲课笔记04:Servlet基础
  3. 十一、安全测试和H5测试
  4. 什么是swagger、springfox
  5. 版本库重新定位时svn uuid不一致问题
  6. 嫌耗费 7.5 亿做的“垃圾”软件太难用,被 3 个程序员奶爸重写并开源了,结果......
  7. HTML和Dreamwaver
  8. 一加7pro 刷kali nethunter
  9. 鲨鱼出海:何时启动Kickstarter或Indiegogo活动?
  10. mysql geometry wkt_mysql使用WKB函数创建Geometry(几何)值