欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

16個python常用魔法函數小結

 更新時間:2023年05月16日 16:02:10   作者:軒哥啊哈OvO  
本文主要介紹了16個python常用魔法函數小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1、__ init__():

所有類的超類object,有一個默認包含pass的__ init __()實現(xiàn),這個函數會在對象初始化的時候調用,我們可以選擇實現(xiàn),也可以選擇不實現(xiàn),一般建議是實現(xiàn)的,不實現(xiàn)對象屬性就不會被初始化,雖然我們仍然可以對其進行賦值,但是它已經成了隱式的了,編程時顯示遠比隱式的更好,看下面的小栗子:

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

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

2、__ str__():

直接打印對象的實現(xiàn)方法,__ str__是被print函數調用的,一般都是return一個什么東西,這個東西應該是以字符串的形式表現(xiàn)的。如果不是要用str()函數轉換,我們可以直接print的對象都是實現(xiàn)了__ str__這個方法的,比如dict??聪旅娴睦印?/p>

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

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

3、__ new__():

在object類中存在一個靜態(tài)的__ new__(cls, *args, **kwargs)方法,該方法需要傳遞一個參數cls,cls表示需要實例化的類,此參數在實例化時由Python解釋器自動提供,__ new__方法必須有返回值,且返回的是被實例化的實例,只有在該實例返回后才會調用__ init__來進行初始化,初始化所用的實例就是__ new__返回的結果,也就可以認為是self,我們來看下面的例子:

可以看到,在實例化時候,先執(zhí)行__ new__再執(zhí)行__ init__,而且python會自動傳入我們希望實例化的類,的這里我們顯示的調用了object的__ new__,也可以調用其他的父類的__ new__,那么如果我們定義了__ new__,但是并沒有返回一個本身實例,會發(fā)生什么事呢?例子如下:

可以看到本身的__ 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__():

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

12、__ setitem__():

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

13、__ getitem__():

與上函數相反,__ getitem__可以使對象支持已下標的方式獲取值,例子如下:

這一類魔法函數對我們來說最大的好處是可以增加代碼的優(yōu)雅程度,并且可以方便的進行流程的控制,上面的例子,我們向操作字典一樣在操作一個對象,并且在賦值與取值時都進行了變更,實在是比較好玩。

14、__ delitem__():

該函數支持以下標方式刪除對象數據,實現(xiàn)了這三個函數,這個類就像字典一樣,具備了基本的增刪查功能,有時候這樣寫會很方便。

15、__ iter__():

只要定義了__ iter__()方法對象,就可以使用迭代器訪問,這意味著,我們可以迭代我們自己定義的對象,例子如下。

16、__ del__():

這可以說是一個析構器,或者回收器,在對象引用數降到0時執(zhí)行,有時可能還需要等一會再執(zhí)行,所以一般不推薦使用,但是在代碼中我們偶爾可以用它來實現(xiàn)一些必須要做的,但是并不緊急的事,下面是個例子。

可以看到,在對象不再被引用后,會運行__ del__函數。

到此這篇關于16個python常用魔法函數小結的文章就介紹到這了,更多相關python 魔法函數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python使用requests+excel進行接口自動化測試的實現(xiàn)

    python使用requests+excel進行接口自動化測試的實現(xiàn)

    在當今的互聯(lián)網時代中,接口自動化測試越來越成為軟件測試的重要組成部分,本文就來介紹了python使用requests+excel進行接口自動化測試的實現(xiàn),感興趣的可以了解一下
    2023-11-11
  • 這樣寫python注釋讓代碼更加的優(yōu)雅

    這樣寫python注釋讓代碼更加的優(yōu)雅

    任何編程語言都少不了注釋,Python當然也不例外,下面這篇文章主要給大家介紹了關于如何寫python注釋,才能讓你的代碼更加的優(yōu)雅,需要的朋友可以參考下
    2021-06-06
  • python3 如何讀取python2的npy文件

    python3 如何讀取python2的npy文件

    這篇文章主要介紹了python3 讀取python2的npy文件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Pycharm安裝python庫的方法

    Pycharm安裝python庫的方法

    這篇文章主要介紹了Pycharm安裝python庫的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Python的列表推導式實例詳細解析

    Python的列表推導式實例詳細解析

    這篇文章主要介紹了Python的列表推導式實例詳細解析,列表推導式是Python構建列表list的一種快捷方式,可以使用簡潔的代碼就創(chuàng)建出一個列表,需要的朋友可以參考下
    2023-07-07
  • python實現(xiàn)汽車管理系統(tǒng)

    python實現(xiàn)汽車管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)汽車管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Pycharm遠程連接服務器并實現(xiàn)代碼同步上傳更新功能

    Pycharm遠程連接服務器并實現(xiàn)代碼同步上傳更新功能

    這篇文章主要介紹了Pycharm遠程連接服務器并實現(xiàn)代碼同步上傳更新功能,通過配置遠程連接pycharm,直接在windows下pycharm里修改再保存就可以實現(xiàn)同步更新到服務器里的代碼里了,需要的朋友可以參考下
    2020-02-02
  • 詳解python環(huán)境安裝selenium和手動下載安裝selenium的方法

    詳解python環(huán)境安裝selenium和手動下載安裝selenium的方法

    這篇文章主要介紹了詳解python環(huán)境安裝selenium和手動下載安裝selenium的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • 解決keras使用cov1D函數的輸入問題

    解決keras使用cov1D函數的輸入問題

    這篇文章主要介紹了解決keras使用cov1D函數的輸入問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python中正則表達式的使用詳解

    python中正則表達式的使用詳解

    這篇文章主要介紹了python中正則表達式的使用詳解,另附上一些常用的Python正則例子,有需要的朋友可以參考下
    2014-10-10

最新評論