反射

getattr(object,name,default=None) 
獲取對象object的屬性或者方法,若是存在打印出來,若是不存在,打印出默認值,默認值可選。須要注意的是,若是是返回的對象的方法,返回的是方法的內存地址,若是須要運行這個方法,能夠在後面添加一對括號。

hasattr(object,name) 

其中name爲字符串,判斷一個對象裏面是否有name屬性或者name方法,返回BOOL值,有name特性返回True, 不然返回False

setattr(object,name,value)

函數對應函數 getatt(),用於設置屬性值,該屬性必須存在

delattr(object,name)

刪除一個屬性值

 1 def bulk(self):  2     print("%s你在幹嗎呢" %self.name)  3 
 4 
 5 class dog(object):  6     def __init__(self,name):  7         self.name = name  8 
 9     def eat(self,food): 10         print("%s is eating..%s" %(self.name,food)) 11 
12 
13 d = dog('Djj') 14 choice = input(">>>").strip() 15 
16 if hasattr(d,choice):  #判斷對象有eat方法
17     func = getattr(d,choice) #獲取eat方法,存在就打印出方法的內存地址
18     func('餃子')               #獲取eat方法,後面加括號能夠將這個方法運行
19 else: 20     setattr(d,choice,bulk)  #choice字符串屬性不存在時,設置該屬性爲bulk,簡單來講就是choice輸入一個不存在的值,給對象d的屬性賦值,若屬性不存在,先建立再賦值
21     t = getattr(d,choice) 22     t(d)

其實上面的例子就是判斷d這個對象裏面有沒有choice輸入的屬性,若是有就執行eat打印,若是沒有,就執行下面的建立屬性,因爲你不知道用戶輸入的是什麼變量,在這裏不能將setattr裏面的name寫入固定值,這是就須要用t傳入參數,而後再傳入對象d的值,後返回bulk

下面有個說明的例子:

 1 class dog(object):  2     jineng = '哈沙克'
 3     power = 'less'
 4     def __init__(self,name):  5         self.name = name  6     def tell(self):  7         print("你的名字%s" %self.name)  8 
 9 d = dog('隨便啦')            #將類實例化對象
10 print(hasattr(d,'jineng'))  #判斷對象裏面是否有jineng這個屬性,OK。返回默認值True,說明有這個屬性
11 print(d.jineng)             #返回這個屬性的值哈沙克
12 setattr(d,'power','Max')    #無論是否有power這個屬性,先建立,而後賦值Max
13 print(d.power)              #返回默認值Max
14 delattr(d,'power')          #刪除一個屬性
15 print(d.power)
1 顯示結果
2 >>>True
3 >>>哈沙克
4 >>>Max
5 >>>less
相關文章
相關標籤/搜索