1. 程式人生 > >python中魔術方法簡述

python中魔術方法簡述

圖片 water pro 程序 基類 get ffffff http cbc

魔術方法:***
技術分享圖片
實例化:
new :
實例化一個對象 方法很少使用,一般使用return super().))new(cls)基類ibject方法來創建實例並返回。

hash:
返回一個整數,如果定義這個方法該類的實例就可hash。
eq:
對應==操作符,判斷2個對象是否相等,返回bool值。
hash方法只是返回一個hash值作為set的key,但是去重,還需要eq來判斷2個對象是否相等。只是hash沖突,不能說明兩個對象是相等的。因此,一般來說提供hash方法是為了作為set或者dict的key,所以去重要同時提供eq方法。
如果一個類不能hash,就把hash設置為None。

bool

技術分享圖片

可視化:

技術分享圖片

運算符重載:
技術分享圖片
技術分享圖片

容器相關方法:

技術分享圖片
技術分享圖片

可調用對象:
python中一切皆對象,函數也不例外。
call類中定義一個該方法,實例就可以像函數一樣被調用。
技術分享圖片

上下文管理:
技術分享圖片

實例化對象時,並不會調用enter進入with語句塊調用enter方法,然後執行語句塊,最後離開時,調用exit方法。
enter方法返回值就是上下文中使用的對象,with語法會把它的返回值賦予as字句的變量。
技術分享圖片
技術分享圖片

反射:
運行時,區別於編譯時,指的是程序被加載到內存中執行的時候。
reflection,指的是運行時獲取類型定義信息。
簡單說,再Python中,能夠通過一個對象,找出其type,class,attribute,method的能力。
具有反射能力的函數有:type(),isinstance(),callable(),dir(),getattr()

技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片

delattr():
可以阻止通過實例刪除屬性的操作,但是通過類依然可以刪除屬性。

getattribute:
除非明確知道用該方法做什麽,不然少用。
技術分享圖片

描述器 Descriptors:
所用魔術方法:get(),set(),delete()
技術分享圖片
技術分享圖片

x= A()時,A已經產生了實例,則init已運行。
技術分享圖片

運行結果來看,只有類屬性是類的實例才行。
技術分享圖片

python中魔術方法簡述