python基础学习中要懂的知识点:反射机制
反射是什么
反射指在程序運行過程中可以動態獲取對象的信息。 是通過字符串的形式 ,導入模塊;通過字符串的形式,去模塊 尋找指定函數 ,并執行。利用字符串的形式去對象中操作成員,一種 基于字符串的驅動 。
Python反射中的內置函數
getattr()
getattr():用于獲取 對象中的屬性 ,但是其不能獲取 私有變量 也就是最前面帶 __ 的屬性或方法,getattr(object,name,default)其有三個參數
- object :對象
- name :對象中的屬性值
- default :可選 該對象中不存在該屬性的時候的返回值。
例子:
class B:def __init__(self):self.name = 'Bb'self.age = 40def add(self):print('B')if __name__ == '__main__':b = B()print(getattr(b, 'name', 'not found')) # 輸出:Bbprint(getattr(b, 'cc', 'not found')) # 輸出:not foundfunc = getattr(b,'add',None)print(func) # 輸出:<bound method B.add of <__main__.B object at 0x00000248C7F48648>>func() # 輸出:Bhasattr()
hasattr(object,name)該函數用于檢測對象( object )中是否含有name (指的是某個屬性名而并不是指name) 這個屬性,其中object是對象,name是指需要檢查該對象中是否存在的屬性的名稱。
例子:
''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' class B:def __init__(self):self.name = 'Bb'self.age = 40def add(self):print('B')if __name__ == '__main__':b = B()print(hasattr(b, 'ccc')) # Falseprint(hasattr(b, 'add')) # Truesetattr()
setattr(object,name,value)是指給某個對象某個屬性設置指定的值,object是對象,name是對象中的屬性名,value是你想要設的值。其中三個參數都是必須的填的。
該函數可以給對象增加新的屬性并且可以將對象中的方法改變。
例子:
class B:def __init__(self):self.name = 'Bb'self.age = 40def add(self):print('B')if __name__ == '__main__':b = B()print(b.age) # 40setattr(b,'age',50)print(b.age) # 50def cc():print('i am changed')b.add() # Bsetattr(b,'add',cc)b.add() # i am changed# print(dir(b))delattr()
delattr(object,name)指刪除對象中的指定屬性,其中object是對象,name是對象中的屬性名。
例子:
''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' class B:def __init__(self):self.name = 'Bb'self.age = 40def add(self):print('B')if __name__ == '__main__':b = B()print(dir(b)) # [,'add', 'age', 'name'] dir()函數會輸出一大堆,在這里我把輸出的一些屬性名直接刪除了print(hasattr(b,'age')) # Truedelattr(b,'age')print(dir(b)) # [,'add', 'name']print(hasattr(b,'age')) # False我在這里再補充說明下 dir() 這個函數: dir()不帶變量時候用于獲取當前范圍內的變量、方法和定義的類型列表;帶參數時返回參數的屬性、方法列表。
- dir(object) object:對象、變量、類型
以上就是python反射中的四個內置函數。
python反射的應用
反射的一個應用就是 web框架 中的 url路由 ,用戶通過輸入 url路由 就可以定位到 views視圖 中的函數,這里面主要應用了 getattr() 這個函數,一個用于獲取 views視圖中對應函數 ,如果沒有就返回你設定的值以此判斷是否可以往下執行。
總結
以上是生活随笔為你收集整理的python基础学习中要懂的知识点:反射机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 一个判断对象是否是一个已知
- 下一篇: Python函数的正确用法及其注意事项