python的getattr和setattr,python __getattr__函数
大蟒之hasattr()getattr()setattr()delattr()函数使用方法详解_mb62abf3afb54fb的技术博客_博客
(一)hasattr(对象,名称)函数
判断一个对象里面是否有名字属性或者名字方法,返回弯曲件值;如果有名字属性(方法)则返回没错,否则返回错误。
注意:名称方法名需要使用引号括起来。
class function_demo(object):
name=demo
定义运行(自身):
返回“你好函数"
函数演示=函数演示()
print(hasattr(functiondemo, name)) #判断对象是否有名字属性,真的
print(hasattr(functiondemo, run)) #判断对象是否有奔跑方法,真的
print(hasattr(functiondemo, age)) #判断对象是否有年龄属性,假(二)getattr(对象,名称[,默认值])函数获取对象目标的属性或者方法,若存在则打印出来;若不存在,则打印默认值,默认值可选。
注意:如果返回的是对象的方法,那么打印的结果是方法的内存地址。如果需要运行这个方法,那么可以在后面添加括号()。
class function_demo(object):
name=demo
定义运行(自身):
返回“你好函数"
函数演示=函数演示()
print(getattr(functiondemo, name)) #获取名字属性,存在就打印出来-演示
打印(getattr(functiondemo, run ))
# 获取奔跑方法,存在打印出方法的内存地址
__main__的#绑定方法函数_演示.运行.0x006E8A10处的功能_演示对象
print(getattr(functiondemo, age ))
# 获取不存在的属性,报错如下:
#回溯(最近一次呼叫):
# File F:/Python/PycharmProjects/Mytest _ code/tmp。py ,模块中的第11行
# getattr(functiondemo, age )
#属性错误:" function _ demo "对象没有属性“年龄”
print(getattr(functiondemo, age ,18)) #获取不存在的属性,返回一个默认值注意:使用用于模块的方法时,可以将一个文件即一个模块看作一个对象,模块的属性即模块中编写的变量,同样可以获取变量指向的值。
例如:
将seckill.settings作为实用程序_设置导入
将【将seckill.settings作为实用程序_设置导入】作为模块,即实用程序_设置作为对象,实用程序设置模块中的驱动程序_目录作为对象属性,当属性不存在时赋值属性为无:
(三)setattr(对象,名称,值)函数给对象的属性赋值,若属性不存在,则先为该对象创建该属性再为对象属性赋值。
class function_demo(object):
name=demo
定义运行(自身):
返回“你好函数"
函数演示=函数演示()
print(hasattr(functiondemo, age))#判断年龄属性是否存在,假的
setattr(functiondemo, age ,18 ) #对年龄属性进行赋值,无返回值
print(hasattr(functiondemo, age)) #再次判断属性是否存在,真的
综合使用:
class function_demo(object):
name=demo
定义运行(自身):
返回“你好函数"
函数演示=函数演示()
if hasattr(functiondemo, addr):#先判断是否存在
addr=getattr(functiondemo, addr )
打印(地址)
否则:
addr=getattr(functiondemo, addr ,setattr(functiondemo, addr ,首都北京))
#addr=getattr(functiondemo, addr ,美国纽约)
打印(地址)
#运行结果:首都北京下面的示例首先判断一个对象的属性是否存在,若不存在则添加该属性
类测试():
name=辛晓婷
定义运行(自身):
返回“你好”
t=测试()
如果不是hasattr(t,年龄):
# getattr(t, age ,setattr(t, age , 18 )# age属性不存在时,设置该属性
setattr(t,年龄, 18 )
print(getattr(t, age)) #可检测设置成功(四)delattr(对象,名称)函数删除类对象x的播放器属性
x=X()
delattr(x, foobar )相等于德尔十。福巴语法:delattr(对象,名称)参数:
目标对象
名字必须是当前对象的属性例子:
类别DelClass:
x=10
y=-5
z=0
obj=DelClass()
打印( x ,对象x)
打印( y ,obj.y)
打印( z ,对象z)
delattr(obj, z) #删除对象的z属性
打印( x ,对象x)
打印( y ,obj.y)
打印(报错,对象z)
结果:
x 10
y -5
z 0
x 10
y -5
打印(报错,对象z)
属性:类型对象“del class”没有属性“z”来期待陌生感和拥抱惊喜。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。