1. 程式人生 > >__getattr__,__getattribute__和__get__的區別

__getattr__,__getattribute__和__get__的區別

color class delattr 失敗 col 指定 嘗試 del 多個

dir(object) 列出對象的大多數屬性

getattr(object, name) 從object對象中獲取name字符串指定的屬性

hasattr(object, name) 如果object對象中存在指定的屬性, 或者能以某種方式通過object 對象獲取指定的屬性, 返回True

setattr(object, name, value) 把object對象指定屬性的值設為value, 可能會創建一個新屬性, 或者覆蓋現有的屬性

getattr(obj, ‘attr‘) 以及obj.attr 和hasattr(obj, ‘attr‘)都會觸發__getattribute__(obj, ‘attr‘) 方法, 只有當嘗試獲取指定的屬性失敗,搜索過obj, class和超類之後調用__getattr__

del obj.attr 觸發Class.__delattr__(obj, ‘attr‘)方法

dir(obj)觸發__dir__(obj)方法

setattr(obj, name, value) 或則通過obj.attr 設置對象屬性時會調用__setattr__(self, name, value)

描述符是對多個屬性運用相同存取邏輯的一種方式。

描述符是實現了特定協議的類, 這個協議包括__get__, __set__和__delete__方法

__getattr__,__getattribute__和__get__的區別