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__)
