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

一.函数介绍

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

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

二.hasatter()函数使用

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

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

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

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

二.getattr()函数使用

1)获取类中存在的属性

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

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

结果直接报错

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

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

二.hasattr()函数使用

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

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

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

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

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

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

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

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

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

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

 

posted @ 2019-08-30 09:29  珠海-路飞  阅读(5427)  评论(0编辑  收藏  举报