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

python中setattr用法_python中hasattr()、getattr()、setattr()函数的使用引言 在阅读源码时 有很多简写的形式 其中一个比较常用的就是 getattr 用来调用一个类中的变量或者方法 相关联的 hasattr getattr setattr 函数的使用也一并学习了一下 正文 1 hasattr object name 判断 object 对象中是否存在 name 属性 当然对于 python 的对象而言 属性包含变量和方法 有则返回 True 没有则返回 False 需要注

引言:

在阅读源码时,有很多简写的形式,其中一个比较常用的就是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 “”, line 1, in

getattr(A, ‘age’)

AttributeError: class A has no attribute ‘age’

>>>

>>> getattr(A, ‘age’, 20)

>>>

>>> getattr(A, ‘func’)

>>>

>>> getattr(A, ‘func’)()    # func()函数不能被A类对象调用,所以报错, 需要用类的实例化对象来调用

Traceback (most recent call last):

File “”, line 1, in

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’)

>>>

感受一下:

057a5013da424bd0536cf2f38e535418.png

总结

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

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231693.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月26日 下午8:01
下一篇 2025年11月26日 下午8:22


相关推荐

  • 理解目标检测中的mAP与F1 Score

    理解目标检测中的mAP与F1 Score文章目录总述IoUTP、TN、FP、FNPrecisionRecallF1-ScoremAPmAP计算过程:总述要理解mAP与F1Score需要一些前置条件,比如:IoU、FP、TP、FN、TN、AP等IoU衡量监测框和标签框的重合程度。一张图就能解释。TP、TN、FP、FNTP,即TruePositives,表示样本被分为正样本且分配正确。TN,即TrueNegatives,表示样本被分为样本且分配正确。FP,即FalsePositives,表示样本被分为正样本但分配错

    2022年10月14日
    5
  • BigDecimal除法问题

    BigDecimal除法问题BigDecimal做除法时,尽量使用divide(BigDecimaldivisor,intscale,introundingMode),这个方法divisor:被除数  scale保留小数位数  roundingMode保留小数时采用的方法,一般使用BigDecimal.ROUND_UP(四舍五入)如果不指定保留小数位数,在遇到除不尽的情况下就会报错BigDecimal源码:…

    2022年6月15日
    34
  • 女生学java_女生到底适不适合学Java-Fun言

    女生学java_女生到底适不适合学Java-Fun言随着女性越来越独立,我们可以看到再以前我们认为不适合女性朋友从事的工作,也出现了越来越多的女生,例如对IT行业也不再跟之前一样畏惧。虽然当下很多人所持的观点依旧是,女生不适合IT行业,但是很多女生已经在IT行业中崭露头角,成为IT行业中的中坚力量。越来越多的女生有志于从事IT行业,很多女生选择学Java,那么女生学习Java到底有没有优势呢?怎么说呢,女生学习Java有时候比男生更占优势!具体表现…

    2022年7月7日
    22
  • tkmapper mybatis plus 集成_gitea docker

    tkmapper mybatis plus 集成_gitea docker———————————————————————————————————————————-一、设置TkMapper单独放在一个包:这个包只有TkMapper一个文件importtk.mybatis.mapper.common.M…

    2022年10月7日
    6
  • smail指令参考「建议收藏」

    smail指令参考「建议收藏」DalvikopcodesAuthor: GaborPallerVxvaluesinthetabledenoteaDalvikregister.Dependingontheinstruction,16,256or64kregisterscanbeaccessed.Operationsonlonganddoublevalues

    2025年6月19日
    4
  • 贴片电阻阻值为5.1k_贴片电阻的规格和功率的关系

    贴片电阻阻值为5.1k_贴片电阻的规格和功率的关系2019独角兽企业重金招聘Python工程师标准>>>…

    2022年8月21日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号