1. 程式人生 > 其它 >拓端tecdat:R語言貝葉斯廣義線性混合效應(多層次/水平/巢狀)模型GLMM、邏輯迴歸分析教育留級影響因素資料

拓端tecdat:R語言貝葉斯廣義線性混合效應(多層次/水平/巢狀)模型GLMM、邏輯迴歸分析教育留級影響因素資料

其實,反射就是通過字串的形式,匯入模組;通過字串的形式,去模組尋找指定函式,並執行。利用字串的形式去物件(模組)中操作(查詢/獲取/刪除/新增)成員,一種基於字串的事件驅動!

先來介紹四個內建函式:

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')  # 刪除模組中某個變數或者函式