__init__:當實例化一個類的時候,首相會執行__new__方法創建一個對象,接下來會執行__init__方法對對象的一些屬性進行初始化. 所以如果對象有屬性,一般會直接寫在__init__方法裡面: __str__:當實例化一個類之後,就有了一個對象的引用,如 test = Test() 這個 ...
__init__:當實例化一個類的時候,首相會執行__new__方法創建一個對象,接下來會執行__init__方法對對象的一些屬性進行初始化.
所以如果對象有屬性,一般會直接寫在__init__方法裡面:
class Test: def __init__(self, a, b): self.a = a self.b = b test = Test(a, b)
__str__:當實例化一個類之後,就有了一個對象的引用,如 test = Test() 這個時候如果直接print(test),輸出的是這個對象所屬於的類以及在記憶體中存儲的位置,如果想輸出別的信息,可以重定義__str__方法:
class Test: def __str__(self): return '這是一個測試類' test = Test() print(test) >>>這是一個測試類
__del__:在一個對象的引用計數成為0後,會自動調用__del__方法來進行一些......善後操作.....
如創建一個對象 test = Test(),這個時候test變數所指向的對象的引用計數為1,
如果手動用del 刪除test這個變數,或者程式運行結束系統自動刪除它以釋放記憶體空間,
那麼對象的引用計數會變為0,同時在刪除前調用__del__方法.
class Test: def __del__(self): print('已經調用__del__方法...') test = Test() del test print('--------程式結束--------') >>>已經調用__del__方法... --------程式結束--------
需要註意的是,如果引用計數不為0,也就是如果還有變數指向這個對象,更進一步如果這個對象所在的記憶體沒有被回收,那麼是不會調用__del方法的.
如:接上面代碼,若實例化一個對象: test = Test(), 下一步 test2 = test,這個時候對象的引用計數就變成了2,如果單單刪除test: del test ,是不會調用__del__方法的,
必須要把 test2 也刪除 : del test2 , 這個時候才會調用__del__方法.