Python 中的函數的雙下划線“__”


  Python中最常見的是類中的帶有雙下滑線的函數是 __init__()最開始只是知道 有初始化的作用,這里從原理上總結一下。

  在Python中,由這些名字組成的集合所包含的方法稱為特殊方法。如果對象實現了這些方法中的某一個,那么這個方法會在特殊情況下(確切的說是根據名字)被Python調用。而幾乎沒有直接調用它們的必要。

  一、首先討論__init__(),標准來說它是類的構造方法。當一個對象被創建后,會立即調用構造方法。

  

class Test:
    def __init__(self):
        self.a=42

結果是:

      >>> t=Test()
  >>> t.a
  42

 

  二、接下來討論常見的特殊方法的集合,它可以創建行為類似於序列或映射的對象。基本的序列和映射的規則很簡單,但如果要實現它們的全部功能就需要實現很多魔法函數。

幸好,還是有一些捷徑的。

  簡單的概述,我用的不多,感興趣的自己查

 

      __len__(self):這個方法應該返回集合中所含項目的數量。

  __getitem__(self):這個方法返回與所給鍵對應的值。

  __setitem__(self):這個方法應該按一定的方式存儲和key相關的value。

      __delitem__(self):這個方法在對一部分對象使用del語句時會調用。

 

三、python也是面向對象的,一個功能可以包含很多包(Package),一個包中可以有很多模塊(Model),模塊主要是為了實現代碼的重用性,當一個模塊寫完后,我們需要調試(通常單元測試就是這么來的),

那么如何才能讓調試的結果只在運行(調試)該模塊是輸出,而在該模塊被調用時不輸出呢?為了實現這點,需要使用__name__變量:

>>> __name__
'__main__'

寫了一個模塊test2.py

def hello():
    print("hello world")

在另外一個模塊中引入該模塊

import test2

print(test2.__name__)

結果是 >>>test2

如你所見 在“主程序”(包括解釋器的交互式提示符在內)中,變量__name__的值是‘__main__’。而在導入的模塊中,這個值就被設定為模塊的名字。因此,為了讓模塊的測試代碼更好用,可以放在"if"語句中:

def hello():
    print("hello world")
    
if __name__ =="__main__":
    hello()

當其他模塊調用該模塊時 if語句並不會執行(__name__不等於__main__)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM