1. 程式人生 > >hasattr,getattr,setattr

hasattr,getattr,setattr

class my:
    def __init__(self):
        self.d = 1
    def assign(self, k):
        self.j = k
        
a = my()        
#hasattr 方法
print(hasattr(a,assign))   #nameerror  所有的都要加引號

print(hasattr(a,'assign')) #True

print(hasattr(my(),'assign'))   #True my()跟a 是一個東西  都是class my的一個例項

print(hasattr(my,'assign'))     #True  my 是class  有方法 assign

#hasattr  屬性 

print(hasattr(a,'d'))  
print(hasattr(my(),'d'))   
                          #True 因為例項 自動初始化了 而在初始化函式裡 有d這個屬性                         
print(hasattr(my,'d'))    #False 因為my是class  不是例項,沒有執行__init__ 所以不會有d

print(hasattr(my(),'j'))   #False   因為建立例項只執行初始化函式  沒有執行assign 所以
                           #不會有j這個屬性

getattr(my(),'assign',None)  #假如有assign  就返回assign
                             #沒有assign 返回None 如果沒有第三個引數None 不寫
                             #沒有assign的話 就會引起error
setattr(a,'name','wang')  
print(a.name)  #'wang'
                         #設定物件的屬性