Python 屬性訪問

2021-07-03 15:34:21 字數 710 閱讀 6868

對於

python

而言,我們知道可以使用

@property

這樣的decorator

來實現對於類的屬性訪問的控制。

但是這種方法存在乙個限制,即,沒有乙個屬性需要進行屬性控制,就必須新增類似於如下的幾行語句:

@property

defwidth(self):

returnself.__width

其實,我們還有一些內建的函式

__getattr__(self,name)

同樣提供了對屬性訪問的限制。使用該函式,

我們就可以在乙個函式中完成對多個屬性的訪問控制的設定,如:

def__getattr__(self, name):

ifname == "colors":

returnset(self.__colors)

classname= self.__class__.__name__

ifname in fronzenset():

#此處構建的名字是考慮到私有成員變數的重新命名(

name mangling)

returnself.__dict__["___".format(

**locals())]

raiseattributeerror("'' object has no "

"attribute''".format(**locals()))

Python學習 屬性訪問

魔法方法 含義 getattr self,item 定義當使用者試圖訪問獲取乙個不存在的屬性時的行為 getattribute self,item 定義當該類的屬性被訪問時的行為 setattr self,key,value 定義當乙個屬性被設定時的行為 delattr self,item 定義當乙...

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.如果...