Python3 setattr vs __setattr__以及 getattr、__getattr__, hasattr, __hasattr__的用法和区别

Python3 hasattr vs __hasattr__以及 getattr、getattr, setattr vs __setattr__的用法和区别

Python 中经常会需要判断、获取或者新建对象存在某个属性或者方法,这时就需要用到hasattr vs __hasattr__以及 getattr、getattr, setattr vs setattr
1、首先介绍hasattr、getattr、setattr的区别。
hasattr(object, name)
判断该对象有没有name的属性和方法,return 布尔值。name存在返回True, 否则返回False

>>> class Test():
			name = "victor"
			def run(self):
				return "Hello Python!"
>>> t = Test()
>>> hasattr(t, 'name') # 判断对象t是否存在"name"这个字符串对应的属性
True
>>> hasattr(t, 'run') # 判断对象t是否存在"run"这个字符串对应的方法
True
>>> hasattr(t, 'we_run') # 判断对象t是否存在"we_run"这个字符串对应的方法
False

getattr(object, name, [value])
获取该对象有没有相关的name的值,如果name存在,返回该name的值;如果name不存在,且默认值存在,返回默认值,否则,抛除TypeErro

>>> class Test():
  		name = "victor"
  		def run(self):
  			return "Hello Python!"
>>> t = Test()
>>> getattr(t, 'name') # 获取对象t是否存在"name"这个字符串对应的值,并返回
'victor'
>>> getattr(t, 'run') # 获取对象t是否存在"run"这个字符串对应的方法的内存地址,并返回
<bound method test.run of <__main__.test instance at 0x0269C878>>
>>> getattr(t, "run")()  #获取run方法,后面加括号可以将这个方法运行
Hello Python!

setattr(object, name, [value])
对象的属性赋值,若属性不存在,先创建再赋值

>>> class Test():
  		name = "victor"
  		def run(self):
  			return "Hello Python!"
>>> t = Test()
>>> setattr(t, 'age', 18) # 设置对象t是age属性,不返回
>>> getattr(t, "age", setattr(t, "age", "18")) #age属性不存在时,设置该属性
'18'

2、介绍xxxattr、__xxxattr__的区别。
xxxattr是内置函数,调用方法为xxxattr()
__xxxattr__是对象的方法,调用方法为object.xxxattr()
明确对象时,优先使用__xxxattr
.

getattr函数用于获取对象的属性值,语法为: ```python getattr(object, name[, default]) ``` 其中,object是需要获取属性值的对象,name是属性名,default是默认值(可选)。如果该对象存在指定属性,则返回属性值;如果不存在该属性,则根据default参数返回默认值或抛出AttributeError异常。举个例子: ```python class Person: name = 'Tom' age = 18 p = Person() print(getattr(p, 'name')) # 输出:Tom print(getattr(p, 'gender', 'unknown')) # 输出:unknown ``` 在上面的例子中,Person是一个类,p是Person类的一个实例。我们使用getattr函数获取了实例p的name属性值,以及gender属性(不存在)的默认值。 setattr函数用于设置对象的属性值,语法为: ```python setattr(object, name, value) ``` 其中,object是需要设置属性值的对象,name是属性名,value是属性值。如果该对象已存在指定属性,则更新属性值;如果不存在该属性,则创建该属性并设置属性值。举个例子: ```python class Person: name = 'Tom' age = 18 p = Person() setattr(p, 'age', 20) setattr(p, 'gender', 'male') print(p.age, p.gender) # 输出:20 male ``` 在上面的例子中,我们使用setattr函数分别设置了实例p的age和gender属性值。 hasattr函数用于检查对象是否存在指定属性,语法为: ```python hasattr(object, name) ``` 其中,object是需要检查的对象,name是属性名。如果该对象存在指定属性,则返回True;否则返回False。举个例子: ```python class Person: name = 'Tom' age = 18 p = Person() print(hasattr(p, 'name')) # 输出:True print(hasattr(p, 'gender')) # 输出:False ``` 在上面的例子中,我们使用hasattr函数分别检查了实例p的name和gender属性是否存在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值