Python 物件導向反射及內建方法(部分)講解

2021-08-28 00:16:49 字數 1465 閱讀 7607

反射--自省

hasattr(obj, '屬性')   obj.屬性  是否存在

getattr(obj, '屬性') 獲取 obj.屬性 不存在則報錯

getattr(obj, '屬性' , '預設值') 獲取 obj.屬性 不存在 返回 預設值

setattr(obj, '屬性') obj.屬性 = 屬性值

delattr(obj, '屬性') del obj.屬性

2.  內建方法- 屬性的增刪查

# __getattr__, __setattr__, __delattr__

觸發條件:obj點的 方式去操作屬性時觸發的方法

__getattr__: obj.屬性 不存在時觸發

__setattr__: 設定 obj.屬性 時觸發

__delattr__: del obj.屬性 時觸發

# __getitem__  ,  __setitem__ , __delitem__       觸發條件:  obj[屬性] 的方式去操作屬性時觸發的方法

__getitem__: obj[屬性] 時觸發

__setitem__: obj[屬性] = 屬性的值 時觸發

__delitem__: del obj[屬性] 時觸發

3. 內建方法-描述符

# __get__ ,  __set__,  __delete__

# 描述就是乙個新式類,這個類至少要實現上述三個方法的乙個。

# 在其它類中生成本類的物件,本類成為**,別類的物件呼叫本類的物件變數時觸發上述方法。

示例:

class foo:

def __init__(self, name):

self.name = name

def __get__(self, instance, owner):

print('get方法')

def __set__(self, instance, value):

print('set方法')

def __delete__(self, instance):

print('delete方法')

class bar:

x = foo('name')

def takepart(self):

print(self.x)

b1 = bar()

b1.x = 1 //觸發foo 中 __set__方法

print(b1.x) //觸發foo 中 __get__方法

注意:在被描述的類中,類可以直接修改/獲取 描述符,但不會觸發 描述符方法     

# 優先順序:類屬性 -- 描述符屬性 -- 示例屬性

python 物件導向反射以及內建方法

一 反射 什麼是反射 可以用字串的方式去訪問物件的屬性,呼叫物件的方法 但是不能去訪問方法 python中一切皆物件,都可以使用放射。反射的四種方法 hasattr hasattr object.name 判斷乙個物件是否有name屬性或者是name方法。有就返回true,沒有就返回false ge...

Python物件導向 反射

1.什麼是反射 反射的概念是由smith在1982年首次提出的,主要是指程式可以訪問 檢修和修改它本身狀態或行為的一種能力 自省 這一概念的提出很快引發了計算科學領域關於應用反射性的研究。它率先被程式語言的設計領域所採用。3.可以實現自省的四個函式 舉個例子 class people country...

Python 物件導向 反射 自省

反射 程式可以訪問,檢測和修改它本身狀態或行為的一種能力 自省 下面就介紹四種實現自省的函式,適用於類和物件 1,判斷object中有沒有乙個name字串對應的屬性或者方法 hasattr object,name 2,獲取object中name字串對應的屬性值或者方法位址,其中default引數的作...