1、面向對象中的經常使用方法:函數
2、反射:程序應該要具有訪問、檢測、修正自己狀態或者行爲的能力。spa
面向對象中的反射是經過字符串的形式操做對象相關的屬性。對象
(一切都是對象,均可以使用反射。類也是對象,類也可使用反射。)接口
A. 四個反射(檢討)的方式:(對類也適用)字符串
1.hasattr(obj,’屬性名’): 判斷某個對象中是否有某個屬性get
返回值爲布爾型。it
2.getattr(obj,’屬性名’,defaut) 獲取屬性值class
若是有這個屬性:反射
返回的是obj.屬性名。若是屬性書數據屬性可直接訪問,若是是方法,直 接加括號運行。程序
若是沒有這個屬性:返回defaut這個參數
3.setattr(obj,’屬性名’’屬性值) 設置屬性(添加屬性)
能夠爲對象添加屬性:包括數據屬性和函數。
4. delattr(obj,’屬性名’) 刪除某個屬性
1.反射用來能夠實現插拔。(預留接口插入功能,或者刪除功能)
2.動態導入模塊(基於反射當前模塊成員)
3、__getattr__,__delattr__,__setattr__(注意:必須設置參數,參考反射參數)
內置的__開頭的函數,會在特定狀況下自動執行代碼。
如__init__函數會在調用,或者導入模塊包時,自動執行。
__setattr__會在添加、修改屬性的時候被觸發。
__delattr__會在刪除屬性的時候被觸發。
__getattr__只會在訪問屬性,且屬性不存在的狀況下才會觸發。
__getattribute__只要訪問屬性,不能屬性存不存在都會觸發執行。
4、描述符(注意:必須設置參數,參考反射參數)
(注意:描述符當中的__set__()等必須有參數,不然報錯,內置方法。)
在一個新式類中,包含了def __set__(self)或def __get__(self)或def __delete__(self)方法的就叫描述符,因此描述符的本質就是一個新式類。可是描述符(新式類)在操做自身屬性時不觸發,只有將描述符(這個新式類)組合到其餘類中,對這個類進行屬性操做,描述符纔可以相應觸發。
5、__init__、__str__、__call__、__del__的自動觸發條件。
__str__是用來改變對象的值,print時觸發,且返回值必須是字符串類型。