一.函数介绍
在动态检查对象是否包含某些属性(包括方法〉相关的函数有如下几个:
- 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