python中的getattr()、setattr()、hasattr() 函式的使用
阿新 • • 發佈:2020-11-28
python中的getattr()、setattr()、hasattr() 三個函式均是對類屬性或方法的操作,其中:getattr()用於獲取類或例項中指定方法獲取屬性的值;setattr()用於設定類或例項中屬性或方法;hasattr()用於判斷類或例項中是否存在指定的屬性或方法;
getattr() 用法詳解:
getattr(object, name, default=None):其中object:接收物件或物件例項;name:接收要獲取的屬性或方法名;default:如果該類或例項不存在則返回的預設值,如果不傳此引數且該類沒有要獲取的屬性或方法時將會丟擲AttributeError異常;
1 class User: 2 name = "" 3 age = 0 4 sex = "" 5 6 def __init__(self,name,age,sex): 7 self.name = name 8 self.age = age 9 self.sex = sex 10 11 if __name__ == '__main__': 12 user = User("張三",20,"男") 13 print(getattr(user, "addr","沒有該屬性或方法")) # 輸出結果:沒有該屬性或方法14 print(getattr(user,"name")) # 輸出結果:張三
setattr() 用法詳解:
setattr(x, y, v): 其中:x:表示要設定的類或例項;y:表示要設定的屬性或方法;v:表示要設定的屬性或方法的值
class User: name = "" age = 0 sex = "" def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex if__name__ == '__main__': user = User("張三",20,"男") # ------------------為user例項設定屬性------------------------ setattr(user,"addr","北京") # 設定user例項的addr屬性值為北京 print(user.addr) # 返回結果:北京 print(getattr(User, "addr","沒有該屬性或方法")) # 為例項增加屬性或方法後,類中國是不存在該屬性或方法的 # -------------------通過lambda為user例項設定方法------------- setattr(user,"showInfo",lambda :print("顯示使用者資訊")) user.showInfo() # 返回結果:顯示使用者資訊 # -------------------通過編寫函式為user例項設定方法------------- def showInfo(name,sex,age): print("姓名:"+name, "性別:"+sex, "年齡:%s"%age ) setattr(user,"showInfo",showInfo) user.showInfo(user.name,user.sex,user.age) # 輸出結果為:姓名:張三 性別:男 年齡:20 # 如果通過setattr設定已存在的屬性或方法將會覆蓋原來的屬性或方法
hasattr() 用法詳解:
hasattr(*args, **kwargs):第一個引數傳入:類或類例項;第二個引數傳入:要判斷的屬性或方法名;結果返回:True或False
1 class User: 2 name = "" 3 age = 0 4 sex = "" 5 6 def __init__(self,name,age,sex): 7 self.name = name 8 self.age = age 9 self.sex = sex 10 11 if __name__ == '__main__': 12 user = User("張三",20,"男") 13 print(hasattr(user, "name")) # 返回結果:True 14 print(hasattr(user, "addr")) # 返回結果:False