python必背函式 python常用魔法函式

2021-10-16 18:56:13 字數 2874 閱讀 4589

1、__init__():

所有類的超類object,有乙個預設包含pass的__init__()實現,這個函式會在物件初始化的時候呼叫,我們可以選擇實現,也可以選擇不實現,一般建議是實現的,不實現物件屬性就不會被初始化,雖然我們仍然可以對其進行賦值,但是它已經成了隱式的了,程式設計時顯示遠比隱式的更好,看下面的小栗子:

我們可以通過vars函式獲知顯示宣告的屬性,但是隱式的就無法獲知了,這並不值得提倡,但是在知道引數的情況下我們還是可以對其進行賦值的,如下:

不論怎麼樣,顯示的初始化屬性是乙個好習慣。

2、__str__():

直接列印物件的實現方法,__str__是被print函式呼叫的,一般都是return乙個什麼東西,這個東西應該是以字串的形式表現的。如果不是要用str()函式轉換,我們可以直接print的物件都是實現了__str__這個方法的,比如dict。看下面的例子。

__str__是dict其中的乙個方法,這個方法的實現賦予了它直接被print的能力,知道這些,我們就可以給自己的類定義這個方法使其可以print了,例子如下:

但是這個函式返回值必須為string,否則會拋異常:

3、__new__():

在object類中存在乙個靜態的__new__(cls, *args, **kwargs)方法,該方法需要傳遞乙個引數cls,cls表示需要例項化的類,此引數在例項化時由python直譯器自動提供,__new__方法必須有返回值,且返回的是被例項化的例項,只有在該例項返回後才會呼叫__init__來進行初始化,初始化所用的例項就是__new__返回的結果,也就可以認為是self,我們來看下面的例子:

可以看到,在例項化時候,先執行__new__再執行__init__,而且python會自動傳入我們希望例項化的類,的這裡我們顯示的呼叫了object的__new__,也可以呼叫其他的父類的__new__,那麼如果我們定義了__new__,但是並沒有返回乙個本身例項,會發生什麼事呢?例子如下:

可以看到本身的__init__函式並未被呼叫,而是呼叫了str的__init__,可能這樣並不直觀,那麼換乙個例項返回,如下:

這個就比較明顯了,另乙個例項的__init__被呼叫了。

4、__unicode__():

__unicode__()方法是在乙個物件上呼叫unicode()時被呼叫的。因為django的資料庫後端會返回unicode字串給model屬性,所以我們通常會給自己的model寫乙個__unicode__()方法。如果定義了__unicode__()方法但是沒有定義__str__()方法,django會自動提供乙個__str__()方法呼叫 __unicode__()方法,然後把結果轉換為utf-8編碼的字串物件,所以在一般情況下,只定義__unicode__()方法,讓 django來處理字串物件的轉換,看乙個小栗子:

在django中,雖然沒有定義__str__,但是django會將__unicode__轉為了str,當然你呼叫unicode更加是沒有問題的。

5、__call__():

物件通過提供__call__()方法可以模擬函式的行為,如果乙個物件提供了該方法,就可以像函式一樣使用它,還是用例子進行說明。

可以看到,我們在像使用函式一樣使用類,實在是很有意思的事。

6、__len__():

len呼叫後會呼叫物件的__len__函式,我們可以為其定製輸出,如下例子:

但是該函式要求我們返回的值必須為int,否則會報錯,如下:

7、__repr__():

函式str() 用於將值轉化為適於人閱讀的形式,而repr() 轉化為供直譯器讀取的形式,某物件沒有適於人閱讀的解釋形式的話,str() 會返回與repr(),所以print展示的都是str的格式。例子:

8、__setattr__():

該函式可以設定函式的屬性,文字不知怎麼描述,直接上例子:

從上例可以看出,__setattr__函式可以支援物件增加屬性,我們可以有計畫的修改增加屬性的內容。

9、__getattr__()

獲取物件屬性,只有在屬性沒有找到的時候呼叫,還是看例子:

第乙個屬性可以找到,所以不會調__getattr__,第二個屬性找不到,所以會呼叫到。

10、__getattribute__():

該函式和上面介紹的__getattr__很像,都是獲取屬性,但是__getattr__是在屬性不存在時被呼叫,而__getattribute__是無條件被呼叫,這樣會方便我們做一些控制,需要注意,一旦定義了__getattribute__,則__getattr__不再會被呼叫,除非顯式呼叫,例子如下:

11、__delattr__():

本函式的作用是刪除屬性,實現了該函式的類可以用del 命令來刪除屬性,下面還是看個例子。

12、__setitem__():

該函式可以給物件賦值,我們可以以下標的方式對其進行操作,下面看個例子。

13、__getitem__():

與上函式相反,__getitem__可以使物件支援已下標的方式獲取值,例子如下:

這一類魔法函式對我們來說最大的好處是可以增加**的優雅程度,並且可以方便的進行流程的控制,上面的例子,我們向操作字典一樣在操作乙個物件,並且在賦值與取值時都進行了變更,實在是比較好玩。

14、__delitem__():

該函式支援以下標方式刪除物件資料,實現了這三個函式,這個類就像字典一樣,具備了基本的增刪查功能,有時候這樣寫會很方便。

15、__iter__():

只要定義了__iter__()方法物件,就可以使用迭代器訪問,這意味著,我們可以迭代我們自己定義的物件,具體請看第三章,例子如下。

16、__del__():

這可以說是乙個析構器,或者**器,在物件引用數降到0時執行,有時可能還需要等一會再執行,所以一般不推薦使用,但是在**中我們偶爾可以用它來實現一些必須要做的,但是並不緊急的事,下面是個例子。

可以看到,在物件不再被引用後,會執行__del__函式。

python必背內容

1 print 輸出 print 函式的基本用法如下 print 輸出內容 其中,輸出內容可以是數字和字串 使用引號括起來 此類內容將直接輸出,也可 以是包含運算子的表示式,此類內容將計算結果輸出。例如 a 100 變數a,值為100 b 5 變數b,值為5 print 9 輸出數字9 print ...

pandas 必背函式操作

1 五個常用屬性 index,columns,shape,values,dtypes 2 常用函式 set index,reset index,del df column name pd.read csv 3 時間 數字 字串轉換 字串轉換 切割 df column name astype str ...

mysql必背 必背的mysql語句 doc

必背的mysql語句 必背的mysql語句 set names gbk 互動字符集 1 互動字符集要和我的sql語句的編碼保持一致 出現亂碼問題 mysql connect localhost root printf mysql query set names utf8 mysql query in...