反射機制是面向對象編程語言中比較重要的功能,可以動態獲取對象信息以及動態調用對象,Python作為壹門動態編程語言,當然也有反射機制,本文介紹Python反射函數使用方法。
在程序運行時可以獲取對象類型定義信息,例如,Python中的type(obj)將返回obj對象的類型,這種獲取對象的type、attribute或者method的能力稱為反射。通過反射機制,可以用來檢查對象裏的某個方法,或某個變量是否存在。也就是可以 通過字符串映射對象的方法或者屬性 。
Python反射常用的內置函數
先創建壹個類:
利用反射的能力,我們可以通過屬性字典 __dict__ 來訪問對象的屬性:
執行輸出:
接下來測試壹下其他反射函數:
Out:
Out:
Out:
Out:
Out:
Out:
下面介紹兩種Python反射的應用場景。
從前面舉的例子中,我們了解到可以通過 字符串 來獲取對象的屬性( getattr() ),這是非常有用的壹個功能。比如,壹個類中有很多方法,它們提供不同的服務,通過輸入的參數來判斷執行某個方法,壹般的使用如下寫法:
如果函數比較少這樣寫沒有太大問題,如果有很多,這樣寫就比較復雜了,需要寫大量else語句,可以使用反射機制來寫:
這樣是不是簡潔了很多,上面的例子中,通過反射,將字符串變成了函數,實現了對對象方法的動態調用。
可以通過setattr()方法進行動態屬性設置,在使用scapy庫構造報文時,我們需要設置某些報文字段,然而網絡協議的報文字段很多,在需要設置大量字段時,壹個壹個的賦值就很麻煩:
可以使用setattr()方法來賦值:
--THE END--