拓端tecdat:R語言貝葉斯廣義線性混合效應(多層次/水平/巢狀)模型GLMM、邏輯迴歸分析教育留級影響因素資料
阿新 • • 發佈:2021-12-14
其實,反射就是通過字串的形式,匯入模組;通過字串的形式,去模組尋找指定函式,並執行。利用字串的形式去物件(模組)中操作(查詢/獲取/刪除/新增)成員,一種基於字串的事件驅動!
先來介紹四個內建函式:
1 getattr()
getattr()函式是Python自省的核心函式,具體使用大體如下:
class A: def __init__(self): self.name = 'lqz' # self.age='18' def method(self): print("method print") a = A() print(getattr(a, 'name', 'not find')) # 如果a 物件中有屬性name則列印self.name的值,否則列印'not find' print(getattr(a, 'age', 'not find')) # 如果a 物件中有屬性age則列印self.age的值,否則列印'not find' print(getattr(a, 'method', 'default')) # 如果有方法method,否則列印其地址,否則列印default print(getattr(a, 'method', 'default')()) # 如果有方法method,執行函式並列印None否則列印default
2 hasattr(object, name)
說明:判斷物件object是否包含名為name的特性(hasattr是通過呼叫getattr(ojbect, name)是否丟擲異常來實現的)
3 setattr(object, name, value)
這是相對應的getattr()。引數是一個物件,一個字串和一個任意值。字串可能會列出一個現有的屬性或一個新的屬性。這個函式將值賦給屬性的。該物件允許它提供。例如,setattr(x,“foobar”,123)相當於x.foobar = 123。
4.delattr(object, name)
與setattr()相關的一組函式。引數是由一個物件(記住python中一切皆是物件)和一個字串組成的。string引數必須是物件屬性名之一。該函式刪除該obj的一個由string指定的屬性。delattr(x, ‘foobar’)=del x.foobar
我們可以利用上述的四個函式,來對模組進行一系列操作.
r = hasattr(commons, xxx) # 判斷某個函式或者變數是否存在 print(r) setattr(commons, 'age', 18) # 給commons模組增加一個全域性變數age = 18,建立成功返回none setattr(commons, 'age', lambda a: a + 1) # 給模組新增一個函式 delattr(commons, 'age') # 刪除模組中某個變數或者函式