反射--自省
2. 內建方法- 屬性的增刪查hasattr(obj, '屬性') obj.屬性 是否存在getattr(obj, '屬性') 獲取 obj.屬性 不存在則報錯
getattr(obj, '屬性' , '預設值') 獲取 obj.屬性 不存在 返回 預設值
setattr(obj, '屬性') obj.屬性 = 屬性值
delattr(obj, '屬性') del obj.屬性
# __getattr__, __setattr__, __delattr__
觸發條件:obj點的 方式去操作屬性時觸發的方法
__getattr__: obj.屬性 不存在時觸發__setattr__: 設定 obj.屬性 時觸發
__delattr__: del obj.屬性 時觸發
# __getitem__ , __setitem__ , __delitem__ 觸發條件: obj[屬性] 的方式去操作屬性時觸發的方法
3. 內建方法-描述符__getitem__: obj[屬性] 時觸發__setitem__: obj[屬性] = 屬性的值 時觸發
__delitem__: del obj[屬性] 時觸發
# __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引數的作...