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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM