魔法方法
含義__getattr__(self, item)
定義當使用者試圖訪問獲取乙個不存在的屬性時的行為
__getattribute__(self, item)
定義當該類的屬性被訪問時的行為
__setattr__(self, key, value)
定義當乙個屬性被設定時的行為
__delattr__(self, item)
定義當乙個屬性被刪除時的行為
示例1:
classd:
def__getattribute__
(self, name)
:print
('getattribute'
)# 使用super()呼叫object基類的__getattribute__()方法
return
super()
.__getattribute__(name)
def__setattr__
(self, name, value)
:print
('setattr'
)super()
.__setattr__(name, value)
def__delattr__
(self, name)
:print
('delattr'
)super()
.__delattr__(name)
def__getattr__
(self, name)
:print
('getattr'
)
class
rectangle
:def
__init__
(self, width=
0, height=0)
: self.width = width
self.height = height
# __setattr__()定義乙個屬性被設定時的行為
def__setattr__
(self, key, value)
:if key ==
'square'
: self.width = value
self.height = value
else
:# self.name = value
# 當給self.width和self.height賦值時,觸發__setattr__()魔法方法
# 於是執行else下面的語句,如果此處寫self.name = value
#就又變成self.width = value,相當於反覆觸發__setattr__()方法形成死迴圈
super()
.__setattr__(key,value)
#等價於self.__dict__[name] = value
Python 屬性訪問
對於 python 而言,我們知道可以使用 property 這樣的decorator 來實現對於類的屬性訪問的控制。但是這種方法存在乙個限制,即,沒有乙個屬性需要進行屬性控制,就必須新增類似於如下的幾行語句 property defwidth self returnself.width 其實,我們...
python之Class屬性定義和訪問
類的宣告和函式的宣告形式是差不多的,開始都是關鍵字 自定義名稱 定義例項變數 可以在定義方法的時候直接定義,也可以使用例項來定義 可以使用dir classname classname.dict 來檢視有哪些類屬性 class classname the discription of this cl...
Python物件的屬性訪問過程
只想回答乙個問題 當編譯器要讀取obj.field時,發生了什麼?看似簡單的屬性訪問,其過程還蠻曲折的.總共有以下幾個step 1.如果obj本身 乙個instance 有這個屬性,返回.如果沒有,執行 step 2 2.如果obj的class 有這個屬性,返回.如果沒有,執行step 3.3.如果...