python setattr()、getattr()、hasattr() 函数用法介绍

时间:2023-03-09 03:37:08
python setattr()、getattr()、hasattr() 函数用法介绍

一.函数介绍

在动态检查对象是否包含某些属性(包括方法〉相关的函数有如下几个:

  • hasattr(object,name):检查 object 对象是否包含名为 name 的属性或方法。
  • getattr(object,name,default=None):获取 object 对象中名为 name 的属性的属性值(属性和函数都叫做属性)。
  • setattr(object,name,value):将 object 对象的 name 属性设为 value。
 class Learn_Python:
def __init__(self, detail, view_times):
self.detail = detail
self.view_times = view_times def start(self):
print("尝试学习%s" % self.detail) c = Learn_Python('python自动化', 20)

二.hasatter()函数使用

1)判断类中存在的属性和方法

 # 判断是否包含指定的属性或方法
print(hasattr(c, 'detail')) # True
print(hasattr(c, 'view_times')) # True
print(hasattr(c, 'start')) # True

2)判断类中不存在的属性和方法

 # 判断是否包含指定的属性或方法
print(hasattr(c, 'detail_1')) # False
print(hasattr(c, 'view_times_1')) # False
print(hasattr(c, 'start_1')) # False

二.getattr()函数使用

1)获取类中存在的属性

 # 获取指定属性的属性值和方法
print(getattr(c, 'detail')) # 'python自动化'
print(getattr(c, 'view_times')) #
print(getattr(c, 'start')) # <bound method Learn_Python.start of <__main__.Learn_Python object at 0x0000020EC839E3C8>>

2)获取类中不存在的属性

结果直接报错

3)获取类中不存在的属性,并且给它默认值(这个默认值可以自己定义)

 #获取不存在的属性,并且给默认值
print(getattr(c, 'start', '默认值')) #<bound method Learn_Python.start of <__main__.Learn_Python object at 0x00000163F6D08B38>>

二.hasattr()函数使用

1)指定属性设置为新属性值

 #为指定属性设置属性值
setattr(c, 'detail', 'python接口自动化')
setattr(c, 'view_times', 32)
#输出重新设置后的属性值
print(c.detail) #python接口自动化
print(c.view_times) #

2)为对象添加不存在的属性值

 #为对象添加不存在的属性值
setattr(c, 'detail_1', 'python接口自动化') #不存在的detail_1属性值
#输出重新设置后的属性值
print(c.detail_1) #python接口自动化

3)指定方法设置为新的方法

 def end ():
print('随便的方法')
# 将c的start方法设为end函数
setattr(c, 'start', end)
c.start() #随便的方法

4)为对象添加不存在的方法

 def end ():
print('随便的方法')
# 为对象添加不存在的end函数
setattr(c, "start_1",end) #不存在的方法start_1
c.start_1() #随便的方法

5)指定方法设置为属性(不能将方法变为属性值)

 def end ():
print('随便的方法')
# 将c的start方法设为end函数
setattr(c, 'start', "end")
c.start() #TypeError: 'str' object is not callable