一.函數介紹
在動態檢查對象是否包含某些屬性(包括方法〉相關的函數有如下幾個:
- 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