Python學習 屬性訪問

2021-09-10 09:02:27 字數 2258 閱讀 6700

魔法方法

含義__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.如果...